使用Babel将ES6模块转换为ES5 AMD模块,未达预期效果。

4

希望有人能够帮忙。

我正在使用grunt-babel将我的ES6模块代码转换为ES5 AMD模块代码。这是我的ES6代码:

multiply.js

export default function (x,y) {
    return x * y;
};

square.js

import multiply from 'multiply';
export default function (x) {
   return multiply(x,x);
};

app.js

import square from 'square';

var myValue = square(2);
console.log(myValue);

正如您所看到的,我所做的只是创建一个名为“multiply”的模块,将其导入到另一个名为“square”的模块中,最后在我的主js文件中使用“square”。上述3个文件随后会转换为以下内容:

multiply.js

define("multiply", ["exports", "module"], function (exports, module) {
    module.exports = function (x, y) {
        return x * y;
    };
});

square.js

define("square", ["exports", "module", "multiply"], function (exports, module, _resourcesJsEs6moduleExampleMultiply) {
    var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };

    var multiply = _interopRequire(_resourcesJsEs6moduleExampleMultiply);

    module.exports = function (x) {
        return multiply(x, x);
    };
});

app.js

define("app", ["exports", "square"], function (exports, _resourcesJsEs6moduleExampleSquare) {
    var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };

    var square = _interopRequire(_resourcesJsEs6moduleExampleSquare);

    var myValue = square(2);
    console.log(myValue);
});

我的问题是,我期望 'app.js' 文件被转换成类似以下形式的文件:
requirejs(['square'],
    function (square) {
        var myValue = square(2);
        console.log(myValue);
    }
);

在我的gruntfile.js中,我的配置非常简单:
options: {
    moduleIds: true,
    modules: 'amd',
    blacklist: ['strict']
}

我做错了什么吗?


其实我不明白你的问题在哪里?我认为你使用babel编译的代码毕竟是可以工作的。这种方式对于babel来说编译代码非常方便。 - alexpods
嗨,Alez,感谢您的回复。也许是因为我对这一切缺乏经验,但我理解只有在存在'export'时才会生成define()。如果只有'import',则会生成requirejs()。 - Morné Louis de Jongh
1个回答

1

经过进一步的挖掘,我终于意识到了我的错误所在。

在我的当前堆栈中,我被迫使用Almond而不是RequireJS。因此,Almond希望有一个文件来初始化模块,这就是为什么我期望Babel为我生成一个文件。但事实证明,由Babel生成的代码在RequireJS中可以正常工作,但要使其与Almond配合工作,我需要创建一个单独的es5 js文件,只用于初始化由Babel生成的文件。

像这样:

requirejs(['app'],
    function (app) {
        app();
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接