使用 webpack 时的依赖项和 devDependencies

Paw*_*weł 5 dependencies package npm webpack

package.json dependencies当我使用 webpack 时,将任何模块放入其中有意义吗?

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

当我最终用户和我只是想一些软件包安装到我node_modules在我的项目中使用它,我跑npm install package-name,然后NPM安装package-name唯一dependencies,是有意义了。

但是dependencies在我使用时放入任何模块有意义webpack吗?webpack 会将所有依赖项打包到 eg. bundle.js,所以,对我来说,那时不需要安装依赖项(当它们被包含到bundle.js文件中时)。

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

  • 开发人员用户将使用git clone <url to my_project>,然后运行npm install,那么NPM将安装devDependenciespackage.json(和ommit空的dependencies对象),那么它已准备好下发展。
  • 最终用户将使用npm install my-project,然后 npm 将安装my-project,不安装devDependencies (因为这是用于生产)并且不安装dependencies (因为dependencies对象package.json保持为空)。将任何内容放入其中dependencies 会使依赖项加倍:将安装两个依赖项,并且可以在bundle.js文件中访问相同的依赖项。

我对吗?

adj*_*nks 1

你是对的,一旦用 webpack 转译,可能就没有依赖关系了。但是,某些包是多用途的,并且可以多种方式使用,因此在某些情况下可能仍然需要依赖项。

如果您查看package.json 规范,就会发现有两个可能的入口点:“主”和“浏览器”。还有建议的“模块”入口点。目前正在讨论如何在 webpack 中处理这些,并且用户似乎希望 webpack 将它们优先考虑为module > browser > main,但browser目前由 webpack 首先使用。

按顺序对它们进行优先级排序背后的想法module > browser > main大概是浏览器可以直接在“浏览器”中使用预转译的内容,而调用require()include()在您的包上的另一个项目将使用“模块”条目中的非转译代码。“模块”入口代码可以包含具有新功能的现代 JavaScript,然后需要它的项目/包可以将其转换为自己的规范,例如使用“ browserslist ”。

我发现这个问题是因为我想知道同样的事情......