Webpack插件:资产写入文件系统后运行命令

时间:2016-10-19 12:05:57

标签: webpack webpack-plugin

我已经看到了这个问题:Run command after webpack build我修改了那里提供的示例代码。

为了描述我的场景,我正在尝试通过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:/'
        })
    )

我已经包含了doneafter-emit处理程序,但实际上我一直在评论一个。我只需要运行一次事件,但这两个事件都很快就会发生。还有其他可以使用的事件吗?

E:忘了提一下,我也在webpack上运行这个 - 监视任务。我想保存一个文件,让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消息之前发生的日志记录,我希望它会在那之后......

0 个答案:

没有答案