Par*_*ris 5 javascript transpiler babeljs
我的目标是假装通过babel获得一些requirejs代码。我发现,如果我if (typeof define !== "function") { var define = require("amdefine")(module); }在nodejs中运行时在每个文件的顶部添加以下内容,则似乎可以解决问题。
这是我写的一些代码,我认为它们会起作用或几乎起作用:
function injectDefine(babel) {
var header = 'if (typeof define !== "function") { var define = require("amdefine")(module); }';
return new babel.Plugin('amdefine', {
visitor: {
Program: {
enter: function(path, file) {
path.unshiftContainer(
'body',
babel.types.expressionStatement(
babel.types.stringLiteral(header)
)
);
},
},
},
});
}
require('babel-core/register')({
stage: 0,
plugins: [{transformer: injectDefine}],
});
require('../components/button');
Run Code Online (Sandbox Code Playgroud)
该components/button文件只是我尝试测试是否可以加载某些文件。
其他说明:我正在使用babel 5,现在无法升级。我现在也不能.babelrc很轻松地使用它。
提示 1:BABEL_DISABLE_CACHE=1如果您正在对插件进行大量测试,则需要环境变量。如果你有一个像npm run unit你一样运行的脚本,你可能想要BABEL_DISABLE_CACHE=1 npm run unit在测试你的插件时像这样运行。
Tip 2:babel.parse会给你一个完整的程序。你能做的最简单的事情是babel.parse(header).program.body[0]。
以下最终工作:
function injectDefine(babel) {
var header = 'if (typeof define !== "function") { var define = require("amdefine")(module); }';
return new babel.Plugin('amdefine', {
visitor: {
Program: {
enter: function(node, parent) {
node.body.unshift(
babel.parse(header).program.body[0]
);
},
},
},
});
}
require('babel-core/register')({
cache: false,
stage: 0,
plugins: [injectDefine],
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1865 次 |
| 最近记录: |