webpack - 如果入口文件没有改变,不要重建 webpack 包

标签 webpack

考虑我们有一个这样的 webpack 配置:

entry: {
    app: './main.js',
    lib: './vendor.js',   
}
vendor.js文件仅包含来自 node_modules 的库的一堆需求. 99% 的时间我构建捆绑包输出 lib.js捆绑是完全一样的。

我可以告诉 webpack 如果 vendor.js文件没有改变(或者最好是一些其他自定义条件,例如检查 lib.jspackage.json 的修改日期以检测我是否可能在 node_modules 中有新版本的模块) I 不想重建 lib.js捆?由于 typescript 转换等原因,我的 CI 服务器需要花费大量时间。

最佳答案

据我所知,Webpack 只知道一个文件在构建后是否相同,因为有很多因素可以改变文件内容。文件的修改日期确实没有提供足够的信息来确定不应该再次构建它,所以我建议不要这样做或者你可能最终会在某个时候破坏你的构建并让人们感到困惑。

但是,如果您确实觉得有必要这样做,但如果您想使您的 Webpack 配置动态化并使用 fs.stat,则可以这样做。阅读 vendor.js然后仅在其更改时将其添加为条目。大致是这样的:

var fs = require('fs');

var config = {
    entry: {
        app: './main.js'
    }
    ...
};

var stats = fs.statSync('./vendor.js');
if (new Date(stats.mtime).getTime() > process.env.LAST_VENDOR_BUILD_TIMESTAMP) {
    config.lib = './vendor.js';
    // Then save new Date().getTime() somewhere like a DB and
    // pass it in as LAST_VENDOR_BUILD_TIMESTAMP on next build.
}

module.exports = config;

如您所见,解决问题的唯一方法是每个构建都需要了解以前的构建才能实现这一目标。这是不希望的,因为您的构建应该是离散的并且不关心以前的构建结果。

或者,您也应该尝试排除一些 node_modules如果需要很长时间,则从构建开始。我之前没有构建过 typescript 项目,但我排除了所有 node_modules我的构建运行得更快。除此之外,你不应该真的介意你的 CI 服务器有点慢,至少它会很健壮。

关于webpack - 如果入口文件没有改变,不要重建 webpack 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907762/

相关文章:

gradle - 如何使用Webpack组织Kotlin SPA的前端和后端

javascript - 无法为我的 react 应用程序禁用实时重新加载 webpack 开发服务器

javascript - Egghead.io webpack Angular 教程

kotlin - 如何将 tailwindcss 添加到 KotlinJS

javascript - Webpack 无法处理 .tsx 文件

url - Encore webpack 或 Assets 在 symfony 4 中生成错误的图像路径

twitter-bootstrap - 如何通过 webpack 2 从 bootstrap 4 中仅导入一个组件

docker - 在容器内运行时如何修复 Webpack 'You may need an appropriate loader to handle this file type'?

javascript - 如何让源映射在 Webpack 中工作?

Webpack 编译失败(没有任何进一步的错误信息)