我正在尝试设置执行以下任务的发布任务:
拉动最新更改。 做npm安装。 凹凸新版本。 生成捆绑包。 我注入变量引用package.json文件中的version属性,我正在执行的问题是,生成的包包含旧版本值,该旧版本值是任务开始时的值,而不是步骤3之后的值。预期的行为在完成第3步后,生成的捆绑软件应具有正确的版本值。 实际行为是,生成的捆绑包包含自主要任务开始以来的旧版本(发布:测试)。
所以发生了什么事,我注意到主要任务是在整个任务间隔内将package.json文件保存在内存中,在执行完第3步后它不再读取文件。
我正在使用webpack插件将version变量注入到生成的包中:
ew webpack.DefinePlugin({
VERSION: JSON.stringify(require('../package').version),
SERVER: JSON.stringify(require('../package').TEST_SERVER),
ENV: JSON.stringify("TEST"),
LANDING_PAGE: JSON.stringify(require('../package').TEST_LANDING_PAGE)
})
代码:
gulp.task('bump', function(done) {
return gulp.src(['./package.json'])
// bump package.json and bowser.json version
.pipe(bump({
type: argv.type || 'patch'
}))
// save the bumped files into filesystem
.pipe(gulp.dest('./'))
// commit the changed files
.pipe(git.commit('bump version'))
// filter one file
.pipe(filter('package.json'))
// create tag based on the filtered file
// push changes into repository
.pipe(push({
repository: 'origin',
refspec: 'HEAD'
}))
.on('error', function(error) {
gutil.log(gutil.colors.red('Error occurs while pushing changes, please try again.'));
git.reset('HEAD~1', {args:' --hard '}, function (err) {
if (err) {
gutil.log(gutil.colors.red('Please execute the following command before you processed:\n git reset --hard HEAD~1'));
done(err)
} else {
done(error);
}
});
})
.on('end', function (done) {
// console.log('VERSION$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$', JSON.stringify(require('./package').version));
})
});
gulp.task('pull-changes', function(done) {
git.pull(function (err) {
if (err) {
const error = 'Unable to pull latest changes, please check your username & password.'
gutil.log(gutil.colors.red(error));
done(err);
} else {
done()
}
});
});
gulp.task('install-dependencies', function(done) {
return gulp.src(['./package.json'])
.pipe(install({
npm: '--no-optional', // Either a single argument as a string
}));
});
// build test bundle.
gulp.task('build:test', gulp.series('clean', gulp.parallel('other', 'webpack:test')));
gulp.task('publish:test', gulp.series('pull-changes', 'install-dependencies', 'bump', 'build:test'));
答案 0 :(得分:0)
我找到了解决方案,其原因是require模块中的缓存功能。我在第3步后删除了缓存的条目,所有内容都像一个超级按钮! 救援是这样的代码:
delete require.cache[require.resolve('./package.json')]