grunt传参:更改less自动编译时参数无法保存怎么解决

项目用的grunt打包以及自动编译less,需要传参数确定皮肤类型等数据。

grunt dev:args

同时watch了less的修改情况。
问题是less修改之后grunt重新编译less,就没有了参数,但是less需要这些参数来确定颜色、logo名等数据。

尝试过在grunt定义一个变量到grunt对象,但是依然读取不到

请问怎样才能保证watch的时候能拿到第一次的参数?
部分grunt代码如下

grunt.registerTask('default', function(arg) {
        var json = grunt.file.readJSON('package.json');
        grunt.themeStyle = json['theme'][arg];
        grunt.task.run(['clean', 'copy', 'less', 'requirejs', 'concat', 'cssmin', 'filerev', 'usemin', 'imagemin', 'htmlmin']);
    });

    grunt.registerTask('dev', function(arg) {
        var json = grunt.file.readJSON('package.json');
        grunt.themeStyle = json['theme'][arg];
        grunt.logoName = arg;
        grunt.task.run(['less', 'connect',  'watch']);
    });
less: {
            compile: {
                expand: true,
                cwd: './',
                src: ['app/styles/src/**/*.less'],
                dest: './',
                ext: '.css',
                options: {
                    modifyVars: {
                        // 'proName': '<%= pkg.proName %>'
                        'theme': '<%= grunt.themeStyle || "red"%>',
                        'logoName': '<%= grunt.logoName || "HS"%>'
                    }
                }
            }
        },
阅读 2.7k
1 个回答

Hi,

今天我也遇到了这个问题,研究了下Grunt API,

clipboard.png

发现可以用下面的方式去实现,

grunt.registerTask('default', function(arg) {
    var json = grunt.file.readJSON('package.json');
    grunt.config.set('themeStyle', json['theme'][arg]);
    grunt.task.run(['clean', 'copy', 'less', 'requirejs', 'concat', 'cssmin', 'filerev', 'usemin', 'imagemin', 'htmlmin']);
});
grunt.registerTask('dev', function(arg) {
    var json = grunt.file.readJSON('package.json');
    grunt.config.set('themeStyle', json['theme'][arg]);
    grunt.config.set('logoName ', arg);
    grunt.task.run(['less', 'connect',  'watch']);
});
themeStyle: '',
logoName : '',
less: {
    compile: {
        expand: true,
        cwd: './',
        src: ['app/styles/src/**/*.less'],
        dest: './',
        ext: '.css',
        options: {
            modifyVars: {
                // 'proName': '<%= pkg.proName %>'
                'theme': '<%= themeStyle || "red"%>',
                'logoName': '<%= logoName || "HS"%>'
            }
        }
    }
},

Thanks,
Chasal

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题