我试图在meteor js app(meteor版本0.6.4.1)中包含一些crypto.js库。
当我将内容复制并粘贴到server / main.js文件中时,它工作正常,但这使得它非常难以阅读。
当我将库放在服务器目录中的单独文件中时(我也尝试将它们放在lib目录中)我收到错误ReferenceError: CryptoJS is not defined
。
server / main.js的要点:
Meteor.methods({
encrypt:function(bundleID){
return CryptoJS.HmacSHA256(string, 'something');
}
});
我也尝试从
更改hmac-sha256.js文件的第一行var CryptoJS=CryptoJS||function(h,s){...
为:
CryptoJS=CryptoJS||function(h,s){...
使它全球化,但这也行不通。如何正确包含此库?
答案 0 :(得分:4)
在你的应用程序中,dir创建文件夹'packages / cryptojs'并将文件放在那里:
packages / cryptojs / package.js :
Package.describe({
summary: "CryptoJS"
});
Package.on_use(function (api, where) {
api.add_files(['hmac-sha256.js'], ['client','server']);
api.add_files(['enc-base64-min.js'], ['client','server']);
});
您需要通过更改第7行的开头来修改 hmac-sha256.js :
var CryptoJS=CryptoJS||function(h,s){
为:
CryptoJS=function(h,s){
之后,您可以使用它:
var hash = CryptoJS.HmacSHA256("Message", "secret");
var hashInBase64 = CryptoJS.enc.Base64.stringify(hash);
console.log(hashInBase64)
答案 1 :(得分:1)
我作为parhelium的指南,但仍然无法工作,然后我找到了解决此问题的新方法: 只需将hmac-sha512.js中的第7行替换为此行以全局化CryptoJS对象:
this.CryptoJS=this.CryptoJS
修复其他cryptojs的相同内容。要与Base64一起使用,必须确保在其他库之后加载base64.js。
答案 2 :(得分:0)
发生这种情况的原因是由于流星的变量范围。尝试将cryptojs库文件放在/server/compatibility
中。这样可以在其他文件中访问cryptojs库。
通过删除cryptojs源文件中使用的/compatibility
,您也可以在不将其放入var
的情况下使其正常工作。问题是,如果你这样做,更难以保持文件最新。