如何在git pull in a grunt任务后刷新package.json文件?

时间:2015-01-12 16:32:48

标签: gruntjs

我有一个grunt文件,按顺序执行以下任务:

  • Pefrorm a git pull命令(grunt-shell)
  • Uglify package.json 文件中定义的所有javascript文件(grunt-uglify)
  • Concatanate所有uglified javascript文件(grunt-concat)

这里的问题是,有时,pull commit可能会在 package.json 中进行一些更改。 Grunt在任务开始时缓存 package.json ,因此 package.json 不受git pull的影响,这意味着grunt根据旧的包执行任务。 json 文件。

我正在寻找一个刷新缓存 package.json 文件的解决方案,所以我会按照预期的那样在git pull之后运行。

修改:您可以找到整个过程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 %>'
    }
}

1 个答案:

答案 0 :(得分:4)

这是我认为你不能简单地从基本配置中做到的事情,我认为你可能需要一个自定义任务。我说这个的原因是你必须以某种方式重新读取package.json文件,并且在配置中没有办法(我知道)。因此,相反,我们可以创建一个简单的自定义任务,在任务1和2之间读取package.json文件。如果您想要阅读,我在couple blog posts上写了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任务覆盖。