我已经看到了这个问题: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:/'
})
)
我已经包含了done
和after-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
消息之前发生的日志记录,我希望它会在那之后......