将任何模块放入package.json
是否有意义? dependencies
当我使用 webpack 时?
当我想开发一个包时,我使用 git clone <url>
然后 npm install
, 然后 npm 安装所有 dependencies
和 devDependencies
来自 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/