是否可以创建一个require.js模块,该模块在加载完成后自行决定
Is it possible to create a require.js module that decides for itself when it is done loading?
在"正常"require.js函数模块中,一旦模块函数返回,该模块即被视为"已加载":
define(function() {
// As soon as this function returns, the module is "loaded"
});
但是我有一个模块需要进行一些异步脚本加载(特别是包括一些Google Javascript API-s),我不希望我的模块被认为是"加载的",直到我说是
为require.js创建加载程序插件时,会为您提供一个"onload"函数,当插件加载完成时,您可以调用该函数。这将是完美的情况,但我不希望我的谷歌API包装是一个插件,我希望它看起来是一个"正常"的模块。优化器会对插件进行不同的处理,我不想让它头疼。此外,插件必须使用特殊的语法,我想避免每次使用时都要记住这一点
我对API进行了多次梳理,但都没有找到一种方法来完成我想要做的事情。是否有一种未记录(或记录不足)的方法来定义模块,在这种方法中,模块本身可以决定何时应该被视为"加载"?
举个例子,如果存在这样的实现,那将是非常棒的:
define(["onload"], function(onload) {
setTimeout(onload, 5000);
});
第一次需要此模块时,应该需要5秒钟才能"加载"。
我们使用下面的约定引导了很多东西,该约定基于早期版本(0.3.x)的MEAN堆栈,并使用了很棒的异步库。
使用您的示例,它可能看起来像这样:
// bootstrap.js
// Array of tasks to pass to async to execute.
var tasks = [];
// Require path
var thePath = __dirname + '/directoryContainingRequires';
// Build array of tasks to be executed in parallel.
fs.readdirSync(thePath).forEach(function (file) {
if (~file.indexOf('.js')) {
var filePath = thePath + '/' + file;
tasks.push(function(callback) {
require(filePath)(callback);
});
}
});
// Execute parallel methods.
async.parallel(
tasks,
function(err) {
if(err) console.error(err);
console.log('All modules loaded!');
process.exit(0);
}
);
所需的文件如下所示:
// yourModule.js
module.exports = function(moduleCallback) {
setTimeout(function() {
console.log('5 seconds elapsed');
moduleCallback(null);
}, 5000);
};
相关文章:
- 带有模块加载程序的Emscripten
- 使用Socket.io的异步模块加载(AMD)
- 角度模块加载错误
- NaCl中的模块加载进度事件,manifest_version=2,没有内联javascript
- 节点.js - 异步模块加载
- Angular2&SystemJS:在生成模块加载器时找不到模块
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- 杜兰达尔/要求:模块加载和执行
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- 将库从节点模块加载到 nodeJS 中
- 道场模块加载一般
- 在JS模块加载的上下文中,什么是立即执行的工厂函数
- 如何将angularJS模块加载到应用程序中
- 角度模块加载失败
- require.js模块加载不正确
- 如何等待Angular模块加载
- SystemJS-ES6模块加载器-导入时层次结构过多
- 如何用oclazyload加载的外部模块加载Angular translate
- 运行从ecmascript 6模块加载的函数
- 了解 YUI 模块加载和附加