RequireJS 优化文件 returns undefined

RequireJS optimized file returns undefined

我们正在尝试 minify/obfuscate 一个 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);
    });

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

由于我们希望 optimize/obfuscate 代码,我们正在尝试 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);
    });

我们得到 'undefined' 用于打印。

我不知道是不是原来的代码错了,还是我们没有正确使用优化器,还是我们完全搞错了概念。非常感谢任何帮助或指示。提前致谢。

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

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

我们必须

  1. 使用 require.config 或

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