Grunt watch 在不同的环境中触发不同的任务
Grunt watch to fire different tasks in different environments
在 GruntJS 生成我的 CSS+JS 之后,我希望它将生成的文件复制到服务器上的适当位置,因此我设置了不同的 grunt-copy 任务来执行此操作。开发环境和生产环境复制到的路径不同:
devjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/dev/js/prod.min.js'
},
prodjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/htdocs/js/prod.min.js'
},
如何让 grunt watch
知道它在哪个环境中,然后为该环境触发适当的 grunt-copy 任务?我是否需要一个未在 git 存储库中跟踪的配置文件或定义环境的文件,或者有更好的方法吗?
目前我的 grunt-contrib-watch.js
有以下内容,尽管我希望它根据环境只触发 copy:devjs 或 copy:prodjs。
js: {
files: [
paths.assets + '/**/*.js',
],
tasks: ['js', 'copy:devjs', 'copy:prodjs']
},
有什么想法吗?谢谢!
How can I get grunt watch to know which environment it's in?
最佳做法是定义一个 NODE_ENV
环境变量来区分环境。然后,您可以使用一些使用 process.env.NODE_ENV
的子句来注册不同的任务。
然后,您将能够 运行 具有不同配置的相同任务名称。
例如:
if(process.env.NODE_ENV === 'prod')
grunt.registerTask('mytask', ['watch:prodjs']);
else
grunt.registerTask('mytask', ['watch:devjs']);
一种不同的方法(在我看来是更好的方法)是为每个环境注册不同的任务。
这种方式更明确,因此更安全。
grunt.registerTask('prod-task', ['watch:prodjs', 'some-other:prodtask']);
grunt.registerTask('dev-task', ['watch:devjs', 'some-other:devtask']);
然后您可以运行您的环境需要的任何任务。
grunt prod-task
为此我选择使用命令行选项。所以我会使用例如grunt watch --enviro=prod
在命令行(和 cron)上,然后在 grunt-contrib-watch.js:
module.exports = function(grunt) {
var paths = grunt.config.get('paths');
if ( grunt.option( "enviro" ) === 'prod' ) {
var jsprocess = ['js', 'copy:prodjs'];
} else if ( grunt.option( "enviro" ) === 'dev' ) {
var jsprocess = ['js', 'copy:devjs'];
} else {
var jsprocess = ['js'];
}
grunt.config.set(
'watch',
{
options: {
expand: true
},
css: {
files: [
paths.assets + '/**/*.*ss',
],
tasks: cssprocess
},...
在 GruntJS 生成我的 CSS+JS 之后,我希望它将生成的文件复制到服务器上的适当位置,因此我设置了不同的 grunt-copy 任务来执行此操作。开发环境和生产环境复制到的路径不同:
devjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/dev/js/prod.min.js'
},
prodjs: {
src: paths.dest + '/assets/prod.min.js',
dest: '/srv/www/htdocs/js/prod.min.js'
},
如何让 grunt watch
知道它在哪个环境中,然后为该环境触发适当的 grunt-copy 任务?我是否需要一个未在 git 存储库中跟踪的配置文件或定义环境的文件,或者有更好的方法吗?
目前我的 grunt-contrib-watch.js
有以下内容,尽管我希望它根据环境只触发 copy:devjs 或 copy:prodjs。
js: {
files: [
paths.assets + '/**/*.js',
],
tasks: ['js', 'copy:devjs', 'copy:prodjs']
},
有什么想法吗?谢谢!
How can I get grunt watch to know which environment it's in?
最佳做法是定义一个 NODE_ENV
环境变量来区分环境。然后,您可以使用一些使用 process.env.NODE_ENV
的子句来注册不同的任务。
然后,您将能够 运行 具有不同配置的相同任务名称。
例如:
if(process.env.NODE_ENV === 'prod')
grunt.registerTask('mytask', ['watch:prodjs']);
else
grunt.registerTask('mytask', ['watch:devjs']);
一种不同的方法(在我看来是更好的方法)是为每个环境注册不同的任务。
这种方式更明确,因此更安全。
grunt.registerTask('prod-task', ['watch:prodjs', 'some-other:prodtask']);
grunt.registerTask('dev-task', ['watch:devjs', 'some-other:devtask']);
然后您可以运行您的环境需要的任何任务。
grunt prod-task
为此我选择使用命令行选项。所以我会使用例如grunt watch --enviro=prod
在命令行(和 cron)上,然后在 grunt-contrib-watch.js:
module.exports = function(grunt) {
var paths = grunt.config.get('paths');
if ( grunt.option( "enviro" ) === 'prod' ) {
var jsprocess = ['js', 'copy:prodjs'];
} else if ( grunt.option( "enviro" ) === 'dev' ) {
var jsprocess = ['js', 'copy:devjs'];
} else {
var jsprocess = ['js'];
}
grunt.config.set(
'watch',
{
options: {
expand: true
},
css: {
files: [
paths.assets + '/**/*.*ss',
],
tasks: cssprocess
},...