Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack Don';如果条目文件没有';不变_Webpack - Fatal编程技术网

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服务器有点慢,至少它会很健壮