【问题标题】:Can I exclude files from an NPM package on the installation side?我可以在安装端从 NPM 包中排除文件吗?
【发布时间】:2021-04-27 20:28:04
【问题描述】:

是否可以从我的package.json 中的 NPM 包列表中排除文件?

我有一个工作方式略有不同的非浏览器环境:node_modules 目录中的每个文件都成为生产包的一部分。所以没有智能 treeshaking 只导入我在代码中使用的文件。

例如,我使用了一些包含大量测试和 i18n 文件的软件包,其中大部分我不需要并且喜欢从打包的生产版本中删除。但是,它们仍然包含在最终包中,因为整个包文件夹都包含在构建中。

我正在尝试从包中删除尽可能多的文件(无需每次都手动执行)以节省空间和编译时间。我使用的环境是循环node_modules目录中的所有文件,并将它们添加到生产包中(全部使用Javascript打包)。我想要一个 JavaScript 解决方案来在编译时删除这些文件,以便最终包尽可能小。

【问题讨论】:

  • 这适用于您包含在 Web 应用程序中的服务器端 nodejs 包还是客户端包?
  • 客户端软件包,例如 numericjs/momentjs/mustache/backbone
  • “我想要一个 JavaScript 解决方案来在编译时删除这些文件,这样最终的包就尽可能小了。” 如果你捆绑你的 JavaScript,那么它会仅包含作为您导入代码的依赖项的文件。包中不直接依赖的任何其他文件(测试或 CSS 文件通常不是),将不包括在内。
  • 如果你捆绑你的 JavaScript,那么它只会包含你导入的代码的依赖文件。这是从哪里来的?假设我使用 npm 得到npmjs.com/package/numeral;不管我怎么说,tests 目录将保留在包中。当我打包我的项目时它会在那里

标签: javascript node.js npm package.json


【解决方案1】:

我会使用bower 来管理客户端javascript 模块,而不是直接使用npm。

Bower 包比 npm 等价包更简单,并且没有具有模块依赖关系的子文件夹。大多数将包含一个带有预压缩 javascript 的“dist”文件夹。开箱即用,您的包将比使用 npm 时更小。

如果您想更进一步,您可以在 gulpjs 或 gruntjs 脚本中包含一些处理,以手动将所需文件复制到 libcss 文件夹,或使用像 gulp-bower-normalize 这样的插件来 (有点)自动做同样的事情。

【讨论】:

  • 嗯,是的,使用 bower 而不是 npm 就像说喝百事可乐而不是可口可乐。更不用说使用的软件包实际上是相同的。它是一个扩展包管理器,开箱即用的功能并不多。例如,bower.json 文件包含一个指向主 js 文件的 main 键,但它并不是自动选择为“在生产环境中复制此文件”。我认为它的主要区别在于默认放置包的目录。
  • Bower 现已弃用 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 2015-09-16
  • 2019-09-08
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多