Я пытаюсь настроить задачу публикации, которая выполняет следующее:
вытащить последние изменения.
сделать npm установить.
поднять новую версию.
создать пакет.
Я ввожу переменную, ссылаясь на свойство version в файле package.json. Проблема, с которой я сталкиваюсь, заключается в том, что сгенерированный пакет содержит старое значение версии, которое является значением в начале задачи, а не после шага 3. Ожидаемое поведение что после завершения шага 3 сгенерированный пакет должен иметь правильное значение версии.
Фактическое поведение состоит в том, что сгенерированный пакет содержит старую версию с начала основной задачи (publish: test).
Итак, что случилось, я заметил, что основной задачей является сохранение файла package.json в памяти в течение всего интервала задачи, он не читает файл снова после шага 3.
Я внедряю переменную версии в сгенерированный пакет с помощью плагина webpack:
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'));