如何在 git 拉入 grunt 任务后刷新 package.json 文件?
How to refresh package.json file after git pull in a grunt task?
我有一个 g运行t 文件,它按顺序执行以下任务:
- 执行
git pull
命令 (g运行t-shell)
- Uglify package.json 文件中定义的所有 javascript 文件 (g运行t-uglify)
- 连接所有丑化的 javascript 文件 (g运行t-concat)
这里的问题是,有时,拉取的提交可能在 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
任务覆盖。
我有一个 g运行t 文件,它按顺序执行以下任务:
- 执行
git pull
命令 (g运行t-shell) - Uglify package.json 文件中定义的所有 javascript 文件 (g运行t-uglify)
- 连接所有丑化的 javascript 文件 (g运行t-concat)
这里的问题是,有时,拉取的提交可能在 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
任务覆盖。