【问题标题】:How to bundle module without dependencies for publishing npm package如何捆绑没有依赖关系的模块以发布 npm 包
【发布时间】:2016-06-07 01:53:30
【问题描述】:

最近,我开发了一个 React 组件并想发布它。

在这个包里,

"dependencies": {
  "react": "^0.14.6",
  "react-dom": "^0.14.6",
  "react-timer-mixin": "^0.13.3"
}

当我通过webpack 命令构建包时,我会得到一个包含react, react-dom and react-timer-mixin 的包。
这种做法似乎是错误的......

因此,我的问题是如何构建不依赖于发布的包。

*我认为分离主包和依赖项的chuck-vendor方法适用于多个包文件。但我的要求是构建库。

【问题讨论】:

  • 我已经添加了一些内容来回复你。谢谢!
  • 是的,我同意,您的情况实际上有点不同。我删除了我的评论。

标签: javascript reactjs npm webpack


【解决方案1】:

如果你正在构建一个库,你需要将这些依赖注册为externals

总而言之,只需在 webpack 配置中添加 externals 属性并将其设置为包含要排除的模块的名称(字符串)的数组。

更复杂的情况可能需要您指定应如何在导入系统的功能中导入依赖项。您可以使用对象来实现这一点。

Here is the official example:

module.exports = {
    output: {
        libraryTarget: "umd"
    },
    externals: [
        "add",
        {
            "subtract": {
                root: "subtract",
                commonjs2: "./subtract",
                commonjs: ["./math", "subtract"],
                amd: "subtract"
            }
        }
    ]
}

See here for more information about library and externals.

如果您使用的是 ES 2015 和 babel 6,您可能还会遇到将库导出为模块对象而不是您想要的对象(例如您的组件)的问题。 Have a look at this question来解决。

【讨论】:

  • 感谢您的回答!
【解决方案2】:

也许您应该改用peerDependencies。然后你可以在没有 webpack 的情况下构建进行发布。如果你使用 ES6,你只需要一个 babel 转译步骤。

这样的事情通常就足够了

babel ./src -d ./lib

对等依赖项会让 npm 知道使用你的包的项目应该安装了这些依赖项。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多