我能够毫无问题地实施。现在,我的任务(下方)已从./tasks/database-publish.js
移至var exec = require('child_process').exec
。在此任务中,我使用../DbDeploy.ps1
运行一个Powershell(PS1),我写的相对于新的gulp-task文件,它位于gulp.task("zzz_Run-DB-Deply",
function(callback) {
console.log('running db deploy');
plugins.exec('Powershell.exe -executionpolicy remotesigned -File ..\DbDeploy.ps1',
function (err, stdout, stderr) {
console.log(stdout);
callback(err);
});
});
。
在此任务中,我正在执行我的ps1 Splitting gulpfile into multiple file
Powershell.exe -executionpolicy remotesigned -File ..\DbDeploy.ps1
如果我在task
目录中的Powershell中运行zzz_Run-DB-Deploy
,它可以正常工作。但是,当我运行..\DbDeploy.ps1
任务时,我不断获得异常:
流程终止于代码0
我怀疑\D
。我认为{{1}}被用作转义字符。但我不确定。我做错了什么?
答案 0 :(得分:1)
找到解决方案。问题在于将plugins
从gulpfile.js
转移到tasks/gulp-task.js
为了给每个人一些上下文,最好将任务粘贴到此处。我虽然可以使用tasks
变量将所有引用的插件发送到我的plugins
文件夹。不幸的是,我错了。
module.exports = function (gulp, config, plugins) {
'use strict';
console.log('Starting the database migration.');
var exec = require('child_process').exec;
gulp.task("zzz_Run-DB-Deply",
function(callback) {
console.log('running db deploy');
exec("Powershell.exe -executionpolicy remotesigned -File ..\DbDeploy.ps1",
function (err, stdout, stderr) {
console.log(stderr);
console.log(stdout);
console.log(err);
callback(err);
});
});
gulp.task("Build-DB-Project",
function (callback) {
console.log('running build DB project');
var targets = ["Build"];
if (config.runCleanBuilds) {
targets = ["Clean", "Build"];
}
return gulp.src("./Project/*.csproj")
.pipe(plugins.foreach(function (stream, file) {
return stream
.pipe(plugins.debug({ title: "Building" }))
.pipe(plugins.msbuild({
targets: targets,
configuration: config.buildConfiguration,
logCommand: false,
verbosity: "minimal",
stdout: true,
errorOnFail: true,
maxcpucount: config.maxCpuCount,
toolsVersion: config.toolsVersion
}));
}));
});
}
为了解决此问题,我添加了一个引用exe
的新var exec = require('child_process').exec;
变量。此时,运行exec("Powershell.exe pwd")
向我显示我的工作目录实际上是我项目的根目录其中gulpfile.js
和DbDeploy.ps1
都存在。因此,我知道要将文件路径从../DbDeploy.ps1
更改为DbDeploy.ps
。
exec("Powershell.exe -executionpolicy remotesigned -File DbDeploy.ps1",
function (err, stdout, stderr) {
console.log(stderr);
console.log(stdout);
console.log(err);
callback(err);
});