加载的脚本没有出现在全局上下文中

loaded script does not appear in global context

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

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 detects and supports CommonJS (node, browserify) and AMD (RequireJS). In the absence of those, it adds a single function zxcvbn() to the global namespace.

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

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

由于页面上已经有 RequireJS,您可以将 jQuery 调用替换为对 require 的调用,并传递完整路径:

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

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

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