如何使用UglifyJS缩小文件夹中的多个Javascript文件?

Ous*_*ord 42 node.js uglifyjs uglifyjs2

您好我正在使用uglifyJs来缩小我的javascript文件,它一次只能处理一个文件,我所要求的是将名为JS的文件夹中存在的所有javascript文件缩小到一个名为JSM的文件夹中,以便清楚我的JS文件夹中有2个名为test1.js和test2.js的文件,我想对该文件夹运行uglify并在JSM文件夹中生成test1.min.js和test2.min.js,所以有办法吗这个?像这样的命令:

uglifyjs -c -m JS/*.js JSM/*.min.js
Run Code Online (Sandbox Code Playgroud)

或任何可以帮助我的想法.

谢谢.

Dzi*_*owy 84

我知道这似乎是一个巨大的进步,但我真的建议使用咕噜声.一旦掌握了它,它就非常简单.

这是一个速成课程:

  1. 安装NodeJS
  2. 安装Grunt CLI(只需在控制台/终端输入):

    npm install -g grunt-cli
    
  3. package.json在项目的根目录中创建一个简单文件:

    {
      "name": "my-project-name",
      "version": "1.0.0",
      "devDependencies": {
        "grunt": "~0.4.2",
        "grunt-contrib-uglify": "~0.2.4",
        "grunt-contrib-watch" : "~0.5.3"
      }
    }
    
  4. 完成后,只需键入:npm install到控制台(在项目的根目录中).这将安装必要的grunt插件/依赖项(来自上面的包文件).

  5. 现在gruntfile.js在项目的根目录中创建一个简单的(它是您项目的一种配置):

    module.exports = function (grunt) {
        grunt.initConfig({
    
    
        // define source files and their destinations
        uglify: {
            files: { 
                src: 'js/*.js',  // source files mask
                dest: 'jsm/',    // destination folder
                expand: true,    // allow dynamic building
                flatten: true,   // remove all unnecessary nesting
                ext: '.min.js'   // replace .js to .min.js
            }
        },
        watch: {
            js:  { files: 'js/*.js', tasks: [ 'uglify' ] },
        }
    });
    
    // load plugins
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    
    // register at least this one task
    grunt.registerTask('default', [ 'uglify' ]);
    
    Run Code Online (Sandbox Code Playgroud) };
  6. 一旦完成,你只需要构建它.键入控制台:

    grunt
    

    或 - 更好 - 如果你键入执行下面的命令 - grunt将监视你的源文件的更改,如果你更改其中任何一个 - 它将自动构建它们:

    grunt watch --force
    

然后,您可以添加更多插件,例如:css minification,css预处理器(less,sass,stylus),jshint等.

  • 你可以做得更好 - 使用面具,你可以将所有文件合并为一个:`uglify:{tests:{src:['js/*.js'],dest:'jsm/tests.min.js'}},` (7认同)

Cal*_*pau 19

如果你在Linux/Mac上并且可以访问bash,你可以在多个JS文件上使用uglifyjs,如下所示:

rm *.min.js; for f in *.js; do short=${f%.js}; uglifyjs $f > $short.min.js; done
Run Code Online (Sandbox Code Playgroud)

  • 您将如何递归浏览脚本文件夹?我有一个javascripts文件夹,其中包含目录,例如polyfills和库。有没有一种方法可以仅在嵌套目录中递归运行for循环? (2认同)

mmo*_*rey 8

继上面的回答,我现在在.bashrc文件中设置了这个:

alias minify='rm *.min.js; for f in *.js; do short=${f%.js}; uglifyjs $f > $short.min.js; done'
Run Code Online (Sandbox Code Playgroud)


Pet*_*vic 6

npm-only方式:

  1. 跑:

    npm install uglifyjs-folder --save-dev
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后添加到你的package.json东西:

    "uglifyjs": "uglifyjs-folder js -eo jsm"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后运行:

     npm run uglifyjs
    
    Run Code Online (Sandbox Code Playgroud)

请注意,如果您需要生成与源文件相同的文件夹(js),则应执行以下操作:

  1. 跑:

    npm install del-cli uglifyjs-folder --save-dev
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后添加到你的package.json东西:

    "uglifyjs": "del js/*.min.js; uglifyjs-folder js -eo js"
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后运行:

     npm run uglifyjs
    
    Run Code Online (Sandbox Code Playgroud)