npm - 使用 webpack 时的依赖项和 devDependencies

标签 npm webpack dependencies package

将任何模块放入package.json 是否有意义? dependencies当我使用 webpack 时?

当我想开发一个包时,我使用 git clone <url>然后 npm install , 然后 npm 安装所有 dependenciesdevDependencies来自 package.json文件,这是有道理的。

当我是最终用户并且只想将一些软件包安装到我的 node_modules 中时要在我的项目中使用它,我运行 npm install package-name , 然后 npm 安装 package-name仅限 它的dependencies ,这也是有道理的。

但是将任何模块放入 dependencies 是否有意义?当我使用 webpack ? webpack 会将所有依赖项捆绑到例如。 bundle.js ,所以对我来说,不需要安装依赖项(虽然它们包含在 bundle.js 文件中)。

假设我将所有必要的模块放入 devDependencies (保持 dependencies 对象为空)对于我的项目:my-project ,将其与 webpack 捆绑并发布:

  • 开发者用户将使用 git clone <url to my_project> ,然后运行 ​​npm install , 然后 npm 将安装 devDependencies来自 package.json (并省略空 dependencies 对象),然后就可以开发了。
  • 最终用户将使用 npm install my-project , 然后 npm 将安装 my-project , 不要安装 devDependencies (因为这是用于生产的)并且不要安装 dependencies (因为 dependencies 中的 package.json 对象保持为空)。将任何东西放入dependencies 会翻倍依赖关系:将安装两个依赖关系,并且可以在 bundle.js 中访问相同的依赖关系文件。

  • 我对吗?

    最佳答案

    你是对的,一旦它被 webpack 转译,可能就没有依赖关系了。但是,有些包是多用途的,可能以多种方式使用,因此在某些情况下可能仍然需要依赖项。
    如果您查看 package.json specification ,有两个可能的入口点,“main”和“browser”。还有建议的'module ' 入口点。目前在discussion下关于如何在 webpack 中处理这些,用户似乎希望 webpack 将它们优先为 module > browser > main ,但是 browser目前被 webpack 首先使用。
    module > browser > main 的顺序排列它们的优先级背后的想法大概是浏览器可以直接在“浏览器”中使用预编译的东西,而另一个项目调用 require()include()在您的包上将使用“模块”条目中的非转译代码。 “模块”入口代码可以包含具有新功能的现代 JavaScript,然后需要它的项目/包可以将其转换为自己的规范,例如使用“browserslist”。
    我发现了这个问题,因为我想知道同样的事情......

    关于npm - 使用 webpack 时的依赖项和 devDependencies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44591514/

    相关文章:

    javascript - 你好,在我的expo项目中安装DateTimePicker(React Native)

    node.js - Windows 7 : npm uglifyjs "is not recognized as an internal or external command"

    node.js - NVM 安装 Node 不会更改 NPM 全局模块根文件夹

    php - Symfony 4 中不使用 node.js 的 Webpack Encore 的替代品

    cmake - 为什么 CMake 不检测对我生成的文件的依赖?

    npm - 使用 npm 全局安装 Bower

    javascript - WebPack无法在本地项目中通过命令执行

    webpack v5 devtool 应该匹配模式

    Linux - 找不到依赖项 libmysqlclient.so.15

    dependencies - 如何在不指定版本号的情况下安装bower依赖?