如何配置Intern4以使用RequireJS?

如何配置Intern4以使用RequireJS?,requirejs,intern,Requirejs,Intern,我已经在node_modules目录中安装了RequireJS,我的intern.json文件有: "node": { "loader": "requirejs" }, 但是,当我运行“npx实习生”时,它会失败: 错误:加载程序脚本requirejs未注册加载程序回调 在 在 有没有办法让Intern 4使用RequireJS?要使用特定的加载程序,Intern需要一个“加载程序”脚本,该脚本将实际初始化加载程序并使用它处理加载模块。Intern包括几个加载程序的加载程序脚本,如Do

我已经在node_modules目录中安装了RequireJS,我的intern.json文件有:

"node": {
    "loader": "requirejs"
},
但是,当我运行“npx实习生”时,它会失败:

错误:加载程序脚本requirejs未注册加载程序回调 在 在


有没有办法让Intern 4使用RequireJS?

要使用特定的加载程序,Intern需要一个“加载程序”脚本,该脚本将实际初始化加载程序并使用它处理加载模块。Intern包括几个加载程序的加载程序脚本,如Dojo 1、Dojo和SystemJS。它不包括RequireJS的加载程序脚本,但您可以相当轻松地添加一个

RequireJS的简单脚本如下所示:

//您的_项目/reqjs.js
内部注册表加载程序(功能(选项){
函数initLoader(requirejs){
//配置requireJS——使用通过intern.json传入的选项
//配置,然后添加任何其他内容
requirejs.config(选项);
//这是实习生实际调用以加载模块的函数
返回功能(模块){
返回新承诺(功能(解决、拒绝){
requirejs(模块,函数(){
解决();
},函数(错误){
拒绝(错误);
});
});
};
};
如果(窗口类型!==“未定义”){
返回实习生
.loadScript('node_modules/requirejs/require.js')
.然后(函数(){
返回initLoader(window.requirejs);
});
}否则{
返回initLoader(require('requirejs'));
}
});
请注意,Intern不使用加载程序实际检索模块供自己使用(这就是上面的
resolve
调用不包括加载的模块的原因),它只使用加载程序加载测试套件。套件本身可以正常使用装载机

您可以将配置中的脚本用于

"node": {
  "loader": "./reqjs.js"
}

谢谢看起来不错,虽然可能需要对IE11上的浏览器客户端进行一些调整,但没有定义承诺?此外,从节点运行时,没有名为
global
的变量,虽然有名为
require
的全局变量,但它是节点的内置
require()
方法,不是来自RequireJS的,Intern在浏览器中加载了Promise polyfill,所以你应该在那里表现出色。关于
全局
,该节点相当于
窗口
——它应该始终可用。关于
require
,似乎requirejs没有在节点上下文中设置全局(自从我在节点中使用requirejs已经有一段时间了),所以您需要在节点中以不同的方式导入require。我已经更新了答案。谢谢Jason,这看起来更好了,虽然可能在IE上仍然不起作用,因为它使用ES6语法。但我在工作中也做了类似的事情;IE支持
const
,但我忘记了那个箭头函数。我更新了代码,使之更友好。不管怎么说,很高兴听到你有工作!