Javascript 如何使用填隙、第三方脚本和相互依赖关系

Javascript 如何使用填隙、第三方脚本和相互依赖关系,javascript,requirejs,Javascript,Requirejs,我对使用RequireJS还不熟悉,我正在尝试找出第三方的、相互依赖的脚本。具体来说,我正在尝试导入脚本 基本上,该套件由核心(jsbn.js、jsbn2.js、base64.js、rng.js和prng4.js)、基本RSA脚本(RSA.js)和扩展RSA脚本(rsa2.js)组成 rsa.js定义全局变量对象RSAKey,rsa2.js引用它 function RSAKey() { this.n = null; this.e = 0; this.d = null; this.

我对使用RequireJS还不熟悉,我正在尝试找出第三方的、相互依赖的脚本。具体来说,我正在尝试导入脚本

基本上,该套件由核心(jsbn.js、jsbn2.js、base64.js、rng.js和prng4.js)、基本RSA脚本(RSA.js)和扩展RSA脚本(rsa2.js)组成

rsa.js定义全局变量对象RSAKey,rsa2.js引用它

function RSAKey() {
  this.n = null;
  this.e = 0;
  this.d = null;
  this.p = null;
  this.q = null;
  this.dmp1 = null;
  this.dmq1 = null;
  this.coeff = null;
}
我以我认为正确的方式设置了垫片,但在rsa2.js中出现了错误“RSAKey未定义”。以下是我的建议:

require.config({
    paths: {
        'jsbn': "../StanfordRSA/jsbn.js",
        'jsbn2': "../StanfordRSA/jsbn2.js",
        'base64': "../StanfordRSA/base64.js",
        'rng': "../StanfordRSA/rng.js",
        'prng4': "../StanfordRSA/prng4.js",
        'rsa': "../StanfordRSA/rsa.js",
        'rsa2': "../StanfordRSA/rsa2.js"
    },
    shim: {
        'rsa': {
            deps: ['jsbn', 'jsbn2', 'base64', 'rng', 'prng4'],
            exports: "RSAKey"
        },
        'rsa2': {
            deps: ['rsa']
        }
    }
});
我的理解是,如果我在我的一个RequireJS模块中将“rsa2”设置为一个需求,它将查看垫片,并看到rsa2依赖于rsa,而rsa依赖于core并导出RSAKey……但事实并非如此,似乎rsa没有加载,或者加载不正确。(请注意,所有这些都是使用原始脚本标记完成的。我正在尝试将一个已经存在、已经运行的webapp转换为RequireJS)


想法?

您的基本设置是正确的,除了两件事:

  • (非常重要!)您必须省略
    .js
    扩展
  • 您可能错过了脚本之间的确切依赖关系
  • 经过一些实验并阅读脚本顶部的注释后,工作配置为:

      require.config({
        paths: {
            'jsbn': "../StanfordRSA/jsbn",
            'jsbn2': "../StanfordRSA/jsbn2",
            'base64': "../StanfordRSA/base64",
            'rng': "../StanfordRSA/rng",
            'prng4': "../StanfordRSA/prng4",
            'rsa': "../StanfordRSA/rsa",
            'rsa2': "../StanfordRSA/rsa2"
        },
        shim: {
            'rng': {
              deps: ['prng4']
            },
            'jsbn2': {
              deps: ['jsbn']
            },
            'rsa': {
                deps: ['jsbn', 'rng'],
                exports: 'RSAKey'
            },
            'rsa2': {
                deps: ['rsa', 'jsbn2'],
                exports: 'RSAKey'
            }
        }
      });
    

    查看一个plunk。

    明白了!在我的代码中也发现了一些其他的bug,但是一旦我解决了这些bug,脚本现在就可以加载了!谢谢