6

我见过这个问题:在 webpack 构建后运行命令,我修改了那里提供的示例代码。

为了描述我的场景,我试图获取 webpack 输出的资产并将它们部署到已安装的网络驱动器上。我ncp用来复制目录并且实际复制工作正常,似乎当 webpack 调用after-emit事件或done事件时,它实际上并没有完成将文件发送或写入文件系统。我的副本最终会复制空文件或部分写入的文件。

这是整个插件:

'use strict';
var ncp = require('ncp').ncp;

function WebPackDeployAfterBuild(options) {
    var defaultOptions = {

    };

    this.options = Object.assign(defaultOptions, options);
}

WebPackDeployAfterBuild.prototype.apply = function(compiler) {
    const options = this.options;

    compiler.plugin("done", (stats) => {
            console.log(Object.keys(stats.compilation.assets));
            console.log("\nExecuting Deploy on done...");
            ncp(options.from, options.to, function(err) {
                if (err) {
                    console.error("Err in ncp");
                }
                console.log(`Finished deploying ${options.from} to ${options.to}`);
            });
    });

    compiler.plugin("after-emit", (compilation, callback) => {
        console.log(Object.keys(compilation.assets));
        console.log("\nExecuting Deploy on after-emit...");
        ncp(options.from, options.to, function(err) {
            if (err) {
                console.error("Err in ncp");
            }
            console.log(`Finished deploying ${options.from} to ${options.to}`);
            callback();
        });
    });
};

module.exports = WebPackDeployAfterBuild;

这是我webpack.config.js文件中的用法:

config.plugins.push(
        new WebPackDeployAfterBuild({
            from: path.resolve(__dirname, './myOutputPath'),
            to: 'Q:/'
        })
    )

我已经包含了 thedoneafter-emithandlers,但实际上我一直在注释掉一个。我只需要运行一次事件,但这两个事件都触发得太快了。我可以使用其他活动吗?

E:忘了提,我也在一个 webpack --watch 任务上运行这个。我想保存一个文件,让 webpack 处理它并在我开发时立即将它部署到我的服务器上。如果有更好的开发工作流程,我愿意接受建议。

E2:这是发生的事情的日志:

2ms optimize chunk assets
7ms optimize assets
 95% emit
[ 'scripts/app.bundle.js', 'scripts/vendor.bundle.js' ]

Executing Deploy After build...
11ms emit
Hash: a005eef9ae47a167f791
Version: webpack 1.13.2
Time: 278ms
                Asset     Size  Chunks             Chunk Names
scripts/app.bundle.js  61.1 kB       0  [emitted]  scripts/app
    + 20 hidden modules
Child html-webpack-plugin for "index.html":
        + 3 hidden modules
Finished deploying C:\Users\redacted\Source\myprojectOutput to Q:/

您可以看到我所做的日志记录发生在11ms emit消息之前,我希望它在那之后......

4

1 回答 1

0

如果这是为了webpack --watch运行,请考虑使用 webpack-dev-middleware 来执行自动重新编译;您可以使用该waitUntilValid方法添加将在所有其他日志记录发生后执行的回调:文档和简单示例

于 2021-10-23T22:07:16.167 回答