javascript - 使用 babel,如何将一些代码附加到每个文件的顶部?

标签 javascript babeljs transpiler

我的目标是通过 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');

components/button 文件只是我在尝试测试某些文件是否可以加载。

其他注意事项:我使用的是 babel 5,现在无法升级。我现在也不能很容易地使用 .babelrc

最佳答案

提示 1:如果您对插件进行大量测试,则需要环境变量 BABEL_DISABLE_CACHE=1。如果您有一个像 npm run unit 一样运行的脚本,您可能希望在测试您的插件时像 BABEL_DISABLE_CACHE=1 npm run unit 一样运行。

提示 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],
});

关于javascript - 使用 babel,如何将一些代码附加到每个文件的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37148869/

相关文章:

javascript - 如何在此模态 div 中显示此 .php 文件?

c# - 如何将参数传递给ajax调用

javascript - Linq.js 子查询

网页包 2 "exports is not defined"

javascript - 类型错误 - 不是构造函数

javascript - JSON 中未定义获取选项和选择

reactjs - 捆绑失败: Error: Cannot find module 'babel-preset-react-native-stage-0/decorator-support'

javascript - 使用reduce es2015查找最小值和最大值

ios - 模块 '"node_modules/@angular/animations/animations "' has no exported member ' AnimationBuilder'

javascript - 语法错误 : Unexpected token export