Uglify全局变量

WOW*_*WOW 3 javascript node.js uglifyjs2

我在nodejs中有一个应用程序.在其中,我定义了一些跨多个文件共享的全局变量.例如:

//common.js
async = requires("async");
isAuthenticated = function() {
  //...
  return false;
};

//run.js
require("common.js");
async.series([function () {
  isAuthenicated();
}], function () {
  console.log("done");
});
Run Code Online (Sandbox Code Playgroud)

我希望将变量asyncisAuthenticated变量缩小,但在所有文件中缩小为相同的东西.它看起来如下:

//common.min.js
a = requires("async");
b = function() {
  //...
  return false;
};

//run.min.js
require("common.js");
a.series([function () {
  b();
}], function () {
  console.log("done");
});
Run Code Online (Sandbox Code Playgroud)

如何在uglifyjs中做到这一点?

我正在循环遍历文件并uglifyjs $file -m "sort,toplevel" -c > $file.min在每个文件上使用命令.

sur*_*rui 6

  • 不要使用全局变量.
  • var async = reuqire('async')在需要的地方使用
  • module.exports在您需要的特定模块中使用.
  • 使用类似browserify的东西来生成单个js.
  • Uglify(或使用名为uglifyify的browserify转换)

例如,最简单的形式(不使用uglifyify)

$ browserify run.js | uglifyjs -c > run.min.js
Run Code Online (Sandbox Code Playgroud)

请注意,如果您使用自己的代码,common.js则应使用相对路径来使用它var common = require("./common").

我建议你使用exports语法:

// common.js code

exports.isAuthenticated = function() {
  //...
  return false;
};
Run Code Online (Sandbox Code Playgroud)

当然,就像使用async.js一样使用它:

//run.js
var common = require("./common");
var async = require("async")
async.series([function () {
  common.isAuthenicated();
}], function () {
  console.log("done");
});
Run Code Online (Sandbox Code Playgroud)

假设两个common.jsrun.js驻留在同一目录中.

相关问题:如何使用browserify获得缩小的输出?

附注

async.series在问题中使用的方式没有真正的优势.你可能只有:

//run.js
var common = require("./common");

common.isAuthenicated();
console.log("done");
Run Code Online (Sandbox Code Playgroud)

在Async系列中,您通常调用异步函数:

async.series([
    function(callback){
        // do some stuff ...
        callback(null, 'one');
    },
    function(callback){
        // do some more stuff ...
        callback(null, 'two');
    }
],
// optional callback
function(err, results){
    // results is now equal to ['one', 'two']
}); 
Run Code Online (Sandbox Code Playgroud)

所以,我希望看到类似的东西:

// common.js code

exports.isAuthenticated = function(callback) {
  //...
  callback(null, false);
};
Run Code Online (Sandbox Code Playgroud)

然后

//run.js
var common = require("./common");
var async = require("async")
async.series([common.isAuthenicated], function (err, results) {
  console.log("done with", results[0]);
});
Run Code Online (Sandbox Code Playgroud)

我通常喜欢不同的"语法"

// an example using an object instead of an array
async.series({
    one: function(callback){
        setTimeout(function(){
            callback(null, 1);
        }, 200);
    },
    two: function(callback){
        setTimeout(function(){
            callback(null, 2);
        }, 100);
    }
},
function(err, results) {
    // results is now equal to: {one: 1, two: 2}
});
Run Code Online (Sandbox Code Playgroud)

但这是你的电话.异步示例来自https://github.com/caolan/async#seriestasks-callback