package.json中版本的值错误

时间:2018-10-31 07:33:11

标签: gulp

我正在尝试设置执行以下任务的发布任务:

拉动最新更改。 做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'));

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,其原因是require模块中的缓存功能。我在第3步后删除了缓存的条目,所有内容都像一个超级按钮! 救援是这样的代码:

delete require.cache[require.resolve('./package.json')]