我有一个grunt文件,按顺序执行以下任务:
git pull
命令(grunt-shell)这里的问题是,有时,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 %>'
}
}
答案 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
任务覆盖。