RequireJS优化文件返回未定义

时间:2020-03-31 12:57:06

标签: javascript requirejs

我们正在尝试最小化/模糊化js库,以便我们可以在其他项目中重用它。背景信息:我已经做了一些js,但是我是AMD或requireJS的新手。

这是该库的简化版本,仅保留格式:

(function (global, factory) {
if ( typeof exports === 'object' && typeof module !== 'undefined'){ 
    factory(exports);
}
else if (typeof define === 'function' && define.amd){ 
    define(['exports'], factory);
}
else{
    global['SimpleMath'] = factory({}); 
}}(typeof global !== "undefined" ? global : self.window || self.global, 
(function (exports) {

'use strict';

exports.square = function square(value){
    return value * value;
}

exports['square'] = exports.square;

return exports;})));

在main.html里面

requirejs(['./libs/SimpleMath'], function (smath){
        console.log(smath);
        console.log(require.s.contexts._.defined);
    });

这有效,我们可以看到加载的对象已打印出来。

由于我们希望对代码进行优化/模糊处理,因此我们正在尝试requirejs的优化器(单个js文件):

node ../../r.js -o name=SimpleMath out=SimpleMath.min.js baseUrl=.

我们得到的东西看起来像是缩小的文件。 但是,如果现在我尝试使用相同的方法加载缩小版本:

requirejs(['./libs/SimpleMath.min'], function (smath){
        console.log(smath);
        console.log(require.s.contexts._.defined);
    });

我们得到“未定义”的打印输出。

我无法确定原始代码是否错误,或者我们没有正确使用优化器,或者我们完全弄错了概念。非常感谢任何帮助或指示。预先感谢。

1 个答案:

答案 0 :(得分:0)

回答自己,以防有人发现它有用:缩小的文件正在导出这样的命名模块

define('SimpleMath',['exports'],t)..

我们不得不

  1. 使用require.config或

  2. 将其作为命名模块加载
  3. 将其设为匿名,这似乎是我们案例中的推荐选项。