Grunt用于在不同的环境中发射不同的任务

时间:2017-07-18 16:37:32

标签: gruntjs grunt-contrib-watch grunt-contrib-copy

在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 repo中跟踪配置文件或定义环境的配置文件,或者有更好的方法吗?

目前我的grunt-contrib-watch.js有以下内容,但我希望它只能触发副本:devjs或copy:prodjs,具体取决于环境。

        js: {
            files: [
                paths.assets + '/**/*.js',
            ],
            tasks: ['js', 'copy:devjs', 'copy:prodjs']
        },

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:1)

  

如何让咕噜咕噜的手表知道它所处的环境?

最佳做法是定义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

答案 1 :(得分:0)

我选择使用命令行选项。所以我会使用例如命令行(和cron)上的import UIKit extension UIView { class func fromNib(owner: AnyObject? = nil) -> Self { return UIView.fromNib(owner: owner) } class func fromNib<T : UIView>(owner: AnyObject? = nil) -> T { return UIView.fromNib(withName: T.className, owner: owner) as! T } class func fromNib(withName name: String, owner: AnyObject? = nil) -> UIView { return Bundle.main.loadNibNamed(name, owner: owner, options: nil)![0] as! UIView } } ,然后在grunt-contrib-watch.js中有这个:

extension UIView {

    func getCopy() -> Self {
        return UIView.fromNib()
    }  
}