Gruntjs 使用Grunt.JS缩小一些文件,合并所有文件

Gruntjs 使用Grunt.JS缩小一些文件,合并所有文件,gruntjs,uglifyjs,Gruntjs,Uglifyjs,我将把一个开发团队从用于组合和缩小CSS/JS文件的VisualStudio插件Chirpy转移到grunt,作为工作流自动化过程的一部分 在chirpy中,配置如下所示(为简洁起见,被截断): ... 在这个节略的例子中,我有两个文件。一个需要缩小,另一个不需要。(据这里的人说,缩小forms.js会破坏功能,我还没有被分配时间来解决这个问题) 在grunt中,我需要在此列表中的一些文件上运行缩小任务,但不需要在其他文件上运行缩小任务。然后,我需要对所有文件(缩小或其他)运行concat任

我将把一个开发团队从用于组合和缩小CSS/JS文件的VisualStudio插件Chirpy转移到grunt,作为工作流自动化过程的一部分

在chirpy中,配置如下所示(为简洁起见,被截断):


...
在这个节略的例子中,我有两个文件。一个需要缩小,另一个不需要。(据这里的人说,缩小forms.js会破坏功能,我还没有被分配时间来解决这个问题)

grunt
中,我需要在此列表中的一些文件上运行缩小任务,但不需要在其他文件上运行缩小任务。然后,我需要对所有文件(缩小或其他)运行
concat
任务

考虑到uglifyJS需要一个
dest
集来输出缩小的文件,我是否只需将其设置为类似
temp.min.js
,并在我的concat任务中,使用此文件来构建我的
脚本.combined.js
文件[由缩小和未缩小的文件组成],并使用grunt clean删除
temp.min.js
文件

有更好的方法吗

[编辑以添加]
我还担心潜在的加载顺序冲突。当前工具配置为“合并所有这些文件”,每个文件上都有一个标志,指示是否应缩小。我不知道如何通过grunt复制这个工作流如果你有时间从Chirpy迁移到grunt,你肯定有时间尝试几个不同的迷你程序,并检查其中一个不会破坏你的
forms.js
模块

你所做的一切都很好,但我会支持用丑陋来处理一切。在我的例子中,我将所有脚本复制到一个构建文件夹中,然后在它们上运行uglify

我是这么丑的

uglify: {
    js: {
        files: { 'bin/public/js/all.js': 'bin/public/js/**/*.js' },
        options: {
            preserveComments: false
        }
    }
}
你可以,它可能会给你一些想法

当您在
uglify
目标中定义文件时,只需明确说明顺序即可确定顺序

uglify: {
  js: {
    files: { 
      'bin/public/js/all.js': [
        'bin/public/js/IMPORTANT/**/*.js',
        'bin/public/js/something.js',
        'bin/public/js/else.js',
        'bin/public/js/unimportant/*.js',

        // you can even exclude stuff
        'bin/public/js/do-not-minify/**/*.js'
      ]
    }
  }
}
你可以查看更多信息

更新 在globbing模式中描述文件的顺序就是处理文件的顺序,这几乎适用于使用glob-in-Grunt的所有任务。如果你不能丑化所有的东西,我猜你还是会想要连接。在这种情况下,我建议您使用类似以下伪代码的流来启动:

uglify: {
  js: {
    files: { 'bin/public/js/all.js': [
      // using whichever order of importance you need
      'src/public/js/**/*.js',
      '!the-ones-you-dont-minify'
    ]
  }
},
concat: {
  // using whichever order of importance you need
  'src/the-ones-you-dont-minify/**/*.js',
  '!the-ones-you-minified'
}

grunt.registerTask('build', ['clean', 'uglify:js', 'concat']);
  • 安装node.js
  • 将gruntfile.js和package.json添加到项目的根目录 (根据需要在grunfile.js中修改文件的路径(可能需要在textpad中打开,因为在visual studio中可能不会显示)

  • 打开Node.js终端(命令提示符)并转到项目目录

  • 类型:

    npm安装grunt ts--保存[按enter键]

    npm安装grunt cli-g[按enter键]

    咕噜声[按回车键]

  • (如果缺少模块,请键入以下内容进行安装: npm安装[模块名称] )

    例如npm安装grunt contrib丑陋 npm安装grunt contrib手表

    然后键入咕噜声

    只要javascript文件缺少错误(通过jsHint.com运行),就应该缩小没有错误的文件

    这是我的Grunfile.js

    module.exports = function (grunt) {
    
        // 1. All configuration goes here 
        grunt.initConfig({
            pkg: grunt.file.readJSON('package.json'),
            concat: {
                css: {
                    src: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/*.css'],
                    dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/production.css'
                },
                js: {
                    src: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/*.js'],
                    dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/production.js'
                }
            },
            cssmin: {
                css: {
                    src: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/production.css',
                    dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/min/production.min.css'
                }
            },
            uglify: {
                js: {
                    src: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/production.js',
                    dest: 'archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/min/production.min.js'
                }
            },
            watch: {
                css: {
                    files: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/css/*.css'],
                    tasks: ['concat:css', 'cssmin:css']
                },
                js: {
                    files: ['archive/trunk_archived_16_06/Grouptree.UI.Web/UI.core/assets/js/*.js'],
                    tasks: ['concat:js', 'uglify:js']
                }
            }
        });
    
        // 2. Where we tell Grunt we plan to use this plug-in.
        grunt.loadNpmTasks('grunt-contrib-concat');
        grunt.loadNpmTasks('grunt-contrib-cssmin');
        grunt.loadNpmTasks('grunt-contrib-uglify');
        grunt.loadNpmTasks('grunt-contrib-watch');
    
        // 3. Where we tell Grunt what to do when we type "grunt" into the terminal.
        grunt.registerTask('default', ['concat', 'cssmin', 'uglify']);
    
    };
    
    这是我的package.json文件

    {
      "name": "Grunt",
      "version": "0.1.0",
      "devDependencies": {
        "grunt": "~0.4.5",
        "grunt-contrib-concat": "^0.4.0",
        "grunt-contrib-cssmin": "^0.10.0",
        "grunt-contrib-uglify": "^0.5.0",
        "grunt-contrib-watch": "*"
      },
      "dependencies": {
        "grunt": "^0.4.5",
        "grunt-ts": "^1.11.13"
      }
    }
    

    评论你的第一段:问题不在于我的时间,而在于如果我影响forms.js,将要进行的全面回归测试(这是一个非常敏感的话题……forms.js对于一些关键功能来说是一个脆弱、臃肿的代码库。重构在我个人的优先级列表中非常高)…回到手头的问题。你刚才描述的会让我所有的文件都难看,不是吗?我需要缩小其中的一些,而不是全部。对于我的编辑,一个附加问题是文件的加载顺序很重要-一些缩小了,一些没有……所以我必须把我的怨恨任务包括在内,以缩小我需要缩小到临时文件的那些,这是我的编辑任务以适当的顺序对其进行处理(缩小和未缩小),然后grunt clean?好的,这就是我期望的过程。希望有一个更干净的方法。我想如果它开始变得不可维护,我可以将它们扔进它们自己的文件中。嗯,是的,更干净的方法不必将文件从缩小中排除。使用Angular之类的框架可以帮助你解开依赖关系树,是的在过去的几年里,我一直在MV*工作,先是主干,然后是角度。这在我的清单上……但这第一关需要引入尽可能少的认知开销。只需查看下面的教程,它将为您提供清晰的图片。
    {
      "name": "Grunt",
      "version": "0.1.0",
      "devDependencies": {
        "grunt": "~0.4.5",
        "grunt-contrib-concat": "^0.4.0",
        "grunt-contrib-cssmin": "^0.10.0",
        "grunt-contrib-uglify": "^0.5.0",
        "grunt-contrib-watch": "*"
      },
      "dependencies": {
        "grunt": "^0.4.5",
        "grunt-ts": "^1.11.13"
      }
    }