我应该缩小 node_modules 还是应该使用为在客户端部署提供的缩小版本?

Posted

技术标签:

【中文标题】我应该缩小 node_modules 还是应该使用为在客户端部署提供的缩小版本?【英文标题】:Should I minify node_modules or should I use the minified version provided for deploy on client? 【发布时间】:2015-02-03 15:04:45 【问题描述】:

我最近从 require.js 迁移到 webpack,并且一些 node_module 内置了 .min 文件。当我使用 node_module 中的文件时,我只需执行 require('my-module') 并立即加载它而无需任何配置。但这将加载开发版本或更大的版本。

例如 react 已加载 require('react/addons') 但这不是缩小版本。

我的问题是:

我应该正常加载模块然后缩小所有内容吗? 我应该使用他们提供的 .min 文件,然后再次缩小所有内容吗? (这样我节省了很多磁盘) 有更好的方法吗?自动加载缩小文件会很好。

目前,我正在更改 webpack 的别名以在构建应用程序时加载缩小版本:

myConfig.resolve.alias.phaserUnFixed = "nodeModules/phaser/build/custom/phaser-no-physics.min.js";
myConfig.resolve.alias.react = "nodeModules/react/dist/react-with-addons.min.js";
myConfig.resolve.alias.lodash = "nodeModules/lodash/dist/lodash.compat.min.js";
myConfig.resolve.alias.moment = "nodeModules/moment/min/moment.min.js";

但这也不是一个好方法……你能想出更好的方法吗?

【问题讨论】:

【参考方案1】:

我不知道这是否是您正在寻找的答案,但我认为在这种情况下,最好的做法是使用 webpack 将其丑化以用于生产,而不必担心加载缩小文件。让 webpack 在整个捆绑包上运行 uglify 将删除所有未使用的代码路径,然后无论如何都会缩小它。

【讨论】:

有一个名为 phaser 的库,它有不同的文件。默认包含许多其他工具。但它也有其他只有我需要的文件。整个文件是+1MB,我需要的部分是300KB。你有什么建议? 我会坚持让 webpack 缩小其余部分,例如 moment、lodash 和 react,但是对于移相器,我认为您可能应该使用别名,因为它的大小。它会减慢您的构建操作。如果在打包后进行 uglify,生成的输出文件将是相同的,但这只是构建时间的问题。 我也有同样的担忧,webpack 旨在摆脱在浏览器中异步加载的许多文件,但缺点是你以一个非常大的文件结束。可惜这个问题不受欢迎。很多人都在使用 webpack,很多人应该有这个顾虑。

以上是关于我应该缩小 node_modules 还是应该使用为在客户端部署提供的缩小版本?的主要内容,如果未能解决你的问题,请参考以下文章

当我将项目发布到GitHub时,我应该如何处理Grunt的node_modules目录?

我应该如何使用 browserify 和 babelify 转换 ES6 node_modules?

我应该如何排除电子打包器中的所有 node_modules

.min 或 src 作为 node_module 的 package.json 中的“主”文件

我应该在 node_modules 中克隆一个节点库来修改它吗?

Angular 库应该用 typescript 编写还是编译成 javascript