Javascript RequireJS:将插件动态应用于模块id
我使用的插件需要预先添加Javascript RequireJS:将插件动态应用于模块id,javascript,requirejs,babeljs,Javascript,Requirejs,Babeljs,我使用的插件需要预先添加'es6!'到所有需要babel透明的模块ID define(['es6!some-es6-module'],函数(module){ // ... }); RequireJS中是否有API允许我检查模块id并根据需要预先添加插件id?例如,如果我想应用“es6!”到特定目录中的所有模块ID 最终,我需要能够编写这样的定义define(['some-es6-module'],…),并自动添加es6前缀,具体取决于模块id 不寻找有关SystemJS的信息,也不寻找提前进
'es6!'代码>到所有需要babel透明的模块ID
define(['es6!some-es6-module'],函数(module){
// ...
});
RequireJS中是否有API允许我检查模块id并根据需要预先添加插件id?例如,如果我想应用“es6!”代码>到特定目录中的所有模块ID
最终,我需要能够编写这样的定义define(['some-es6-module'],…)
,并自动添加es6代码>前缀,具体取决于模块id
- 不寻找有关SystemJS的信息,也不寻找提前进行透明处理的gulp任务,等等
- 配置时不知道确切的模块ID-我只知道在某些位置/目录中,模块需要
es6代码>
- 需要在运行时在浏览器中工作
我不能100%确定您的总体目标(您希望将es6添加到模块ID中永久保存还是始终自动添加?),但您可以使用来替换已定义模块的模块ID。例如:-
requirejs.config({
map: {
// * - for all modules that require these, do this
'*': {
'some-es6-module': 'es6!some-es6-module'
}
}
});
然而,考虑到您的用例,您可能需要比这更复杂的东西,因为映射假设您有实际不同版本的文件,并且通常用于此目的
我认为您希望避免的一个更复杂的解决方案可能是在r.js中优化文件并通过节点加载/编辑它们之前动态循环文件。它会变得有点乱
var config = requirejs.s.contexts._.config;
var needBabel = ['some-es6-module', 'another-module-name', 'another'];
for (var property in config.paths) {
if (config.paths.hasOwnProperty(property) && needBabel.indexOf(property) > -1) {
// load the module in node
// fs.readFileSync(__dirname + config.paths[property] + '.js');
// dynamically modify this file with text replacement
// save this file via Node again
}
}
// run Require JS optimiser
// undo everything you've just done when optimisation is complete
我最终覆盖了load
方法。覆盖对具有映射路径的模块使用标准加载,否则使用es6
(requirejs babel)插件加载模块
require.standardLoad=require.load;
require.load=函数(上下文、模块名、url){
var config=requirejs.s.contexts.\uu.config;
if(config.path中的moduleName){
返回require.standardLoad(上下文、moduleName、url);
}
require(['es6'],函数(es6){
es6.1负载(
模块名称,
要求
{
fromText:函数(文本){
require.exec(文本);
context.completeLoad(moduleName);
}
},
{});
});
};
这就是它的作用:澄清一下,您是否希望编写这样的定义,并要求自动添加es6!前缀define(['your-es6-module'],function(module){…
正确-我将更新问题以使其更清楚您可以始终在requireJs源代码中的define
函数中添加您自己的钩子…但是当它稍后引起问题或在升级中丢失时,您必须对其进行辩护。有一个问题()这是一个类似的钩子。