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

时间:2013-06-09 09:58:20

标签: 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

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

感谢。

8 个答案:

答案 0 :(得分:82)

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

这是一个速成课程:

  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' ]);
    
    };
  6. 一旦完成,你只需要构建它。输入控制台:

    {{1}}

    或者 - 更好 - 如果你输入以下命令执行命令 - grunt将监视你的源文件是否有变化,如果你改变它们中的任何一个 - 它将自动构建它们:

    grunt
    
  7. 然后你可以添加更多的插件,比如:css minification,css预处理器(less,sass,stylus),jshint等。

答案 1 :(得分:17)

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

rm *.min.js; for f in *.js; do short=${f%.js}; uglifyjs $f > $short.min.js; done

答案 2 :(得分:8)

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

alias minify='rm *.min.js; for f in *.js; do short=${f%.js}; uglifyjs $f > $short.min.js; done'

答案 3 :(得分:6)

npm-only方式:

  1. 运行:

    npm install uglifyjs-folder --save-dev
    
  2. 然后添加到package.json之类的内容:

    "uglifyjs": "uglifyjs-folder js -eo jsm"
    
  3. 然后运行:

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

    1. 运行:

      npm install del-cli uglifyjs-folder --save-dev
      
    2. 然后添加到package.json之类的内容:

      "uglifyjs": "del js/*.min.js; uglifyjs-folder js -eo js"
      
    3. 然后运行:

       npm run uglifyjs
      

答案 4 :(得分:2)

您可以在gruntfile.js中使用此配置:

uglify: {
        all: {
            files: [{
                expand: true,
                cwd: '<path to js folder>',
                src: ['**/*.js', '!*.min.js'],
                dest: '<path to js folder>',
                ext: '.js'
            }]
        }
    }

答案 5 :(得分:0)

制作一个bat文件,从每行开始

开始
start uglifyjs app\main.js -mt sort -c -e -o app\main.ug.js
start uglifyjs app\lib.js -mt sort -c -e -r myfunctionname -o app\lib.ug.js
start uglifyjs app\controllers\bbbCtrl.js -mt sort -c  -o     app\controllers\bbbCtrl.ug.js
start uglifyjs app\controllers\aaaCtrl.js -mt sort -c -e -o app\controllers\aaaCtrl.ug.js

答案 6 :(得分:0)

您可以使用此npm模块软件包

 npm i uglify-js-minify-css-allfiles
 npm i uglify-js clean-css
// making index.js file
const minifyAll = require('uglify-js-minify-css-allfiles');

// Folder Name (you will change all files in Folders)
minifyAll('../test/');

npm package site

答案 7 :(得分:0)

uglify-js不支持ES6 +,因此我建议使用terser(要安装它,请运行npm install terser -g) 在任何路径下递归执行terser的shell脚本下面:

terser_path.sh

#!/bin/bash

####
# Tiny shell script for terser any JavaScript project
# usage:
# ./terser_path <path_to_your_project>
####

path="$1"

find $path -name '*.js' -type f | while read f
do
    folderpath=$(dirname "$f")
    filename=$(basename "$f") 
    extension="${filename##*.}"
    filename="${filename%.*}"
    nf=$folderpath/$filename.min.$extension

# ----- METHOD 1 : Replace the old file
#    terser "$f" --output "$f" --compress --mangle
# ----- METHOD 2 : Create .min.js file
    terser "$f" --output "$nf" --compress --mangle
     
done