如何使用垫片、第三方脚本和相互依赖性
How to work with shimming, third-party scripts, and interdependencies
我是 RequireJS 的新手,正在尝试弄清楚相互依赖的第 3 方脚本。具体来说,我正在尝试导入 Stanford Crypto 脚本。
基本上,该套件由核心(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;
}
我以我认为正确的方式设置了 shim,但我在 rsa2.js 中收到错误 "RSAKey is not defined"。以下是我的垫片:
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']
}
}
});
我的理解是,如果我将 'rsa2' 设置为我的 RequireJS 模块之一的要求,它会查看 shim 并发现 rsa2 依赖于 rsa,而 rsa 依赖于core 和 exports 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 here。
我是 RequireJS 的新手,正在尝试弄清楚相互依赖的第 3 方脚本。具体来说,我正在尝试导入 Stanford Crypto 脚本。
基本上,该套件由核心(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;
}
我以我认为正确的方式设置了 shim,但我在 rsa2.js 中收到错误 "RSAKey is not defined"。以下是我的垫片:
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']
}
}
});
我的理解是,如果我将 'rsa2' 设置为我的 RequireJS 模块之一的要求,它会查看 shim 并发现 rsa2 依赖于 rsa,而 rsa 依赖于core 和 exports 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 here。