繁体   English   中英

使用Babel将ES6模块转换为ES5 AMD模块,无法正常工作

[英]Using Babel to convert ES6 modules to ES5 AMD modules, not working as expected

我希望有人能帮帮忙。

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

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);

如您所见,我正在做的就是创建一个模块“乘”,将其导入另一个模块“平方”,然后最终在我的主js文件中使用“平方”。 然后将上述3个文件转换为以下文件:

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']
}

难道我做错了什么?

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

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

像这样:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM