繁体   English   中英

仅使用非捆绑依赖项发布 NPM package

[英]Publish NPM package with only non-bundled dependencies

假设我们正在开发一个小型 javascript 库L

代码在 ES6 中。 要使用一些实用程序 function,比如debounce ,我们安装 lodash 作为依赖项。

At build the webpack transpiles the code, bundling the tree shaked lodash code, and we end up with a nice little javascript file we want to publish and share as a npm package.

现在, package.json文件将 lodash 列为依赖项。 但这仅在构建时是正确的,在生产中并不是真正需要的。

处理这种情况的正确方法是什么? 将 lodash 视为 devDependency 是否有意义? 因此,只有 webpack 的externals组件才是“真正的”依赖项?

还是我们应该在发布之前以某种方式篡改package.json文件?

你知道处理这个问题的项目的任何真实例子吗?

Webpack 将项目的代码与非外部依赖项的使用代码“合并”到一些bundle.js文件中。 然后,此文件与 package.json 文件一起发布到package.json文件,其中列出了所有依赖项,独立于外部或嵌入式。

dependencies项(或optionalDependenciespeerDependencies )中引用的所有包代码都应该是“生产”代码。 devDependencies中的代码预计仅在“开发”时使用,因此是“开发”代码。 在这个原则下,我认为将非外部依赖声明为开发依赖是不正确的。

但是,如果在已发布的package.json文件中同样声明了所有依赖项,无论是嵌入的还是外部的,那么运行时环境就无法知道哪些是需要提供给 ZEFE90A8E604A7C840E88D03 的真正依赖项。 package 将在运行时导入并且更好地可用。

对于 Node.js 环境,通常不使用捆绑包和 Webpack,因此这永远不会成为问题 — 始终安装所有依赖项(从不合并/捆绑)。

However, if you use the package.json file to drive some web-packages runtime environment, the way that dependencies are currently included in published package.json is not suitable.

您可能想看看Pika Web 的devDependencies package.json属性,该属性旨在解决类似的问题(即使他们的 mojo 是“没有 Webpack 的未来”)。 They also introduce the concept of publishing a different package.json file than that which is checked-in (tampering the package.json before publishing, as you say).

有趣的是,它看起来像一个相关的工具 Pika Pack,引起了 NPM 人的注意,并被考虑成为 NPM 的一部分 所以,也许,NPM 已经意识到 web 项目工作流程的特定 package 格式需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM