Webpack Don';如果条目文件没有';不变
假设我们有这样一个网页包配置:Webpack Don';如果条目文件没有';不变,webpack,Webpack,假设我们有这样一个网页包配置: entry: { app: './main.js', lib: './vendor.js', } var fs = require('fs'); var config = { entry: { app: './main.js' } ... }; var stats = fs.statSync('./vendor.js'); if (new Date(stats.mtime).getTime() &
entry: {
app: './main.js',
lib: './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;
vendor.js
文件只包含从node\u模块
到库的一系列需求。99%的时候,我构建bundle时,输出的lib.js
bundle是完全相同的
如果
vendor.js
文件没有更改(或者更喜欢其他一些自定义条件,例如检查lib.js
和package.json
的修改日期,以检测node\u modules
中是否有新版本的模块),我可以告诉webpack吗我不想重建lib.js
捆绑包?由于类型脚本传输等原因,在我的CI服务器上需要花费大量的时间。据我所知,Webpack只知道一个文件在构建后是否会是相同的,因为有太多因素会改变文件内容。文件的修改日期确实没有提供足够的信息来确定不应再次构建该文件,因此我建议不要这样做,否则您可能会在某个时候破坏构建,并让人们感到困惑
但是,如果您确实觉得有必要这样做,如果您想使您的网页配置动态化,并使用它来读取vendor.js
,然后仅在其更改时将其添加为条目,则可以这样做。大致如下:
entry: {
app: './main.js',
lib: './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;
正如您所见,解决问题的唯一方法是每个构建都需要了解以前的构建才能实现这一点。这是不需要的,因为您的构建应该是离散的,并且不关心以前的构建结果
或者,如果需要很长时间,您也应该尝试从构建中排除一些节点单元模块。我以前没有构建过typescript项目,但是我排除了所有的node\u模块
,我的构建运行得更快。除此之外,您不应该真的介意您的CI服务器有点慢,至少它会很健壮