加载的脚本不会出现在全局上下文中

时间:2017-12-20 06:54:46

标签: requirejs aurelia

我正在尝试在我的一个模型中加载脚本:

attached(){
$.ajax({
  type: 'GET',
  url: '/lib/zxcvbn/dist/zxcvbn.js',
  dataType: 'script',
  cache: true
}).done(function(script, textStatus) {
  console.log('loaded script');
});

}

done回调被点击,但导出zxcvbn在全局上下文中不可用。

在普通的html页面(即不是aurelia)中运行的完全相同的代码工作正常(zxcvbn 在全局上下文中可用)

我知道这不是在aurelia中加载外部JS文件的推荐方法,但是脚本非常大,只在我的应用程序中的一个位置需要。 zxcvbn州的文档:

  

zxcvbn检测并支持CommonJS(node,browserify)和AMD(RequireJS)。如果没有这些,它会向全局命名空间添加一个函数zxcvbn()。

我的aurelia应用程序正在使用RequireJS;如果它没有加载到全局命名空间,它在哪里加载,我该如何引用它?

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,zxcvbn检测到存在AMD加载程序(RequireJS)并调用define将自己注册为AMD模块。

由于您已在页面上安装了RequireJS,因此可以通过调用require来替换您的jQuery调用,并传递完整路径:

require(['/lib/zxcvbn/dist/zxcvbn.js'], function (zxcvbn) {
  // Do something with zxcvbn ...
});

由于脚本将自身注册为AMD模块,因此参数zxcvbn将保存模块的值。

请注意,当您传递以正斜杠开头的路径时,RequireJS会按原样使用路径:这会绕过您的RequireJS配置(例如baseUrlpathsmap未应用等),并且RequireJS不会添加.js扩展名,因此需要具有扩展名。