使用动态参数查看 Grunt run 任务

问题描述 投票:0回答:1

使用 Grunt Js 我正在尝试将 js 文件从一个文件夹缩小到另一个文件夹,当我对路径进行硬编码或者如果我通过 CLI 传递版本文件夹名称时,这是有效的查找

喜欢: 咕噜缩小--vrn=11.3.0 11.3.0 是路径中的文件夹名称 ../../ecommerce/${version}/js/sitejs/ 我的“ecommerce”文件夹有多个目录,版本如下 -> 10.0.0 -> 11.3.0 . .

Js的SRC路径:../../ecommerce/11.3.0/js/sitejs/

压缩 Js 的 DEST 路径:../../ecommerce/11.3.0/js/sitejs/u-min/

我正在尝试的是读取“ecommemerce”下的所有目录名称并将其动态传递给任务,以便在一个命令中检查所有版本文件夹的文件更改并为相同的文件生成 minfied 文件

这可能吗? 如果我从 CLI 调用 grunt minify,它将一次性用于 changed:uglify:site:11.3.0 & changed:uglify:site:10.0.0

注意:我的场景无法使用手表

下面是我的Gruntfile.js

module.exports = function (grunt) {
  let version = grunt.option('vrn');

  let inputSiteFilePath = `../../ecommerce/${version}/js/sitejs/`;
  let targetSiteFilePath = `../../ecommerce/${version}/js/sitejs/u-min/`;
  
  let versionDirList = [];
  grunt.file.expand({ filter: 'isDirectory' }, '../../ecommerce/*').forEach(element => {
    versionDirList.push(element.split("/").pop());
  });
  console.log('versionDirList:',versionDirList);
   
  grunt.loadNpmTasks("grunt-contrib-uglify");
  grunt.loadNpmTasks('grunt-changed');

  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),
    uglify: {
      site: {
        options: {
          sourceMap: true,
          ie8: true,
          mangle: false,
          compress: {
            sequences: true,
            properties: true,
            dead_code: true,
            drop_debugger: true,
            unsafe: false,
            conditionals: true,
            comparisons: true,
            evaluate: true,
            booleans: true,
            loops: true,
            unused: true,
            hoist_funs: true,
            hoist_vars: false,
            if_return: true,
            join_vars: true,
            side_effects: true,
            drop_console: true,
            global_defs: {},
          },
        },
        files: [
          {
            cwd: inputSiteFilePath,
            src: ["*.js"],
            dest:targetSiteFilePath,
            expand: true,
            flatten: false,
          },
        ],
      },
    },
  });
  
  grunt.registerTask('minify', ['changed:uglify:site']);

};

输出

PS D:\GitHubApplications\minify-app> grunt minify --vrn=11.3.0
versionDirList: [ '10.12.0', '11.3.0' ]
Running "changed:uglify:site" (changed) task

Running "uglify:site" (uglify) task
>> 1 sourcemap created.
>> 1 file created 16.8 kB → 11.3 kB

Running "changed-postrun:uglify:site:1:D:\GitHubApplications\minify-app\node_modules\grunt-changed\.cache" (changed-postrun) task

Done.
PS D:\GitHubApplications\minify-app> 
gruntjs grunt-contrib-uglify grunt-changed
1个回答
0
投票

在下面,我能够为所有版本循环任务并一次性缩小

注意

changed
被删除了,因为它在我的场景中不起作用,并且没有识别所有版本文件夹中的文件更改

module.exports = function (grunt) {
  grunt.loadNpmTasks("grunt-contrib-uglify");
  grunt.initConfig({
    pkg: grunt.file.readJSON("package.json"),
    uglify: {
      site: {
        options: {
          vrn:"11.3.0",
          sourceMap: true,
          ie8: true,
          mangle: false,
          compress: {
            sequences: true,
            properties: true,
            dead_code: true,
            drop_debugger: true,
            unsafe: false,
            conditionals: true,
            comparisons: true,
            evaluate: true,
            booleans: true,
            loops: true,
            unused: true,
            hoist_funs: true,
            hoist_vars: false,
            if_return: true,
            join_vars: true,
            side_effects: true,
            drop_console: true,
            global_defs: {},
            
          },
        },
        files: [
          {
            cwd: `../../ecommerce/<%= vrn %>/js/sitejs/`,
            src: ["*.js"],
            dest: `../../ecommerce/<%= vrn %>/js/sitejs/u-min/`,
            expand: true,
            flatten: false,
          },
        ],
      },
    },
  });

  grunt.registerTask('minifyalljs', function(vrn){
    grunt.config.set('vrn', vrn);
    grunt.task.run('uglify:site');
  });
   
  grunt.registerTask('minifyalljsversion', function(){
    grunt.file.expand({ filter: 'isDirectory' }, '../../ecommerce/*').forEach(element => {
      var currentVrn = element.split("/").pop();
      grunt.task.run('minifyalljs:' + currentVrn);
    });
  });
};

对于 CLI:

grunt minifyalljsversion

© www.soinside.com 2019 - 2024. All rights reserved.