如何在 git 拉入 grunt 任务后刷新 package.json 文件?

How to refresh package.json file after git pull in a grunt task?

我有一个 g运行t 文件,它按顺序执行以下任务:

这里的问题是,有时,拉取的提交可能在 package.json 中有一些更改。 G运行t 在任务开始时缓存 package.json 所以 package.json 不受 git pull 这意味着 g运行t 根据旧 package.json 文件执行任务。

我正在寻找一种解决方案来刷新缓存的 package.json 文件,因此我会 运行 在 git 之后按预期提取.

编辑:可以找到整个过程here

这是我从包 json 中读取文件的片段:

uglify: {
    options: {
        report: 'gzip',
        compress: true,
        banner: '<%= banner %>',
    },
    mangle: {
        toplevel: false
    },
    squeeze: {
        dead_code: false
    },
    codegen: {
        quote_keys: true
    },
    dist: {
        files: {
            '<%= pkg.dirs.js.dist.min %>': '<%= pkg.dirs.js.dist.src %>'
        }
    }
}

concat: {
    js: {
        options: {
            banner: '<%= banner %>',
            stripBanners: true,
            separator: ';\n'
        },
        src: '<%= pkg.dirs.js.dev %>',
        dest: '<%= pkg.dirs.js.dist.src %>'
    },
    css: {
        options: {
            banner: '<%= banner %>',
            stripBanners: true,
            separator: ' \n'
        },
        src: '<%= pkg.dirs.css.dev %>',
        dest: '<%= pkg.dirs.css.dist.src %>'
    }
}

我认为您无法仅通过基本配置完成此操作,我认为您可能需要自定义任务。我这样说的原因是您必须以某种方式重新读取 package.json 文件,并且在配置中没有办法这样做(据我所知)。因此,相反,我们可以创建一个简单的自定义任务,在任务 1 和任务 2 之间读取 package.json 文件。如果您想进一步阅读,我写了一个 couple blog posts on custom tasks

这是我要为自定义任务做的事情:

grunt.registerMultiTask('readpkg', 'Read in the package.json file', function() {

    grunt.config.set('pkg', grunt.file.readJSON('./package.json'));

});

然后我们需要为您的设置设置多任务:

grunt.registerMultiTask('build', [ 'shell', 'readpkg', 'uglify:dist', 'concat:js' ]);

显然您可能需要调整这些任务。您可以在 Gruntfile.js 配置中保留 package.json 文件的初始读取,它应该被 readpkg 任务覆盖。