在我的项目中,我有一个gulpfile.js
,它应该将一些文件从一个目录复制到另一个目录。在Visual Studio中从Task Runner Explorer
本地运行它。
当我想在 Azure DevOps 中执行此 gulp 脚本时,它会抱怨缺少包。
我的gulpfile.js看起来像这样:
/// <binding AfterBuild='moduleCopy, copyModuleDependencies' />
var gulp = require('gulp');
var newer = require('gulp-newer');
var rename = require('gulp-rename');
gulp.task('copyModuleDependencies', function (cd) {
gulp.src('../*Module/bin/Release/netcoreapp3.0/*.dll')
.pipe(rename({ dirname: '' }))
.pipe(gulp.dest("bin/Release/netcoreapp3.0/Modules"))
});
gulp.task('moduleCopy', function (cb) {
gulp.src('../*Module/bin/Release/netcoreapp3.0/*.Module.dll')
.pipe(newer("bin/Release/netcoreapp3.0/Modules/"))
.pipe(rename({ dirname: '' }))
.pipe(gulp.dest("bin/Release/netcoreapp3.0/Modules/"))
});
我的 package.json 文件如下所示:
{
"name": "MyHost",
"version": "1.0.0",
"description": "",
"main": "gulpfile.js",
"dependencies": {
"gulp": "^4.0.2",
"gulp-newer": "^1.4.0",
"gulp-rename": "^1.4.0",
"upath": "^1.2.0"
},
"devDependencies": {}
}
还有我的 azure-pipelines.yml 文件:
触发: - 功能/混淆
池: vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
- task: Npm@1
inputs:
command: 'install'
workingDir: 'obfuscated.Host'
- task: Gulp@1
inputs:
gulpFile: 'obfuscated.Host/gulpfile.js'
targets: 'moduleCopy copyModuleDependencies'
enableCodeCoverage: false
触发构建时,npm 似乎能够安装package.json
文件中指定的包,但是当它应该执行 gulpfile 时.js会发生这种情况:
内部/模块/CJS/加载器.js:638 投掷错误; ^
Error: Cannot find module 'upath'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/vsts/work/1/s/obfuscated.Host/node_modules/chokidar/index.js:13:13)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
##[error]Gulp failed with error: /usr/local/bin/gulp failed with return code: 1
##[section]Finishing: Gulp
显然,它似乎缺少 packages.json 中的一些包,但为什么这在本地工作?
我相信这是因为您不是从项目目录运行管道 YAML 文件中的 gulp 任务,而是运行解决方案目录。由于您在正确的路径中指定了"gulpfile.js",因此它能够找到它并发现您的任务,但随后它会从您尚未设置的当前工作目录执行 gulp,因此它默认为解决方案目录。
尝试从 gulp 任务中删除gulpFile
输入(因为它默认为"gulpfile.js"(,并将workingDirectory
输入添加到项目目录"混淆"。主机",因此:
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
- task: Npm@1
inputs:
command: 'install'
workingDir: 'obfuscated.Host'
- task: Gulp@1
inputs:
workingDirectory: 'obfuscated.Host'
targets: 'moduleCopy copyModuleDependencies'
enableCodeCoverage: false