Javascript 使用Babel将ES6模块转换为ES5 AMD模块,未按预期工作

Javascript 使用Babel将ES6模块转换为ES5 AMD模块,未按预期工作,javascript,gruntjs,amd,ecmascript-6,babeljs,Javascript,Gruntjs,Amd,Ecmascript 6,Babeljs,我希望有人能帮忙 我正在使用grunt babel将我的ES6模块代码转换为ES5 AMD模块代码。以下是我的ES6代码: multiply.js export default function (x,y) { return x * y; }; define("multiply", ["exports", "module"], function (exports, module) { module.exports = function (x, y) { retu

我希望有人能帮忙

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

multiply.js

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

import multiply from 'multiply';
export default function (x) {
   return multiply(x,x);
};
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

import square from 'square';

var myValue = square(2);
console.log(myValue);
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);
});
如您所见,我所做的只是创建一个模块“multiply”,将其导入另一个模块“square”,然后在我的主js文件中使用“square”。然后将上述3个文件转换为以下文件:

multiply.js

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

import multiply from 'multiply';
export default function (x) {
   return multiply(x,x);
};
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

import square from 'square';

var myValue = square(2);
console.log(myValue);
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);
    }
);
requirejs(['app'],
    function (app) {
        app();
    }
);
在我的gruntfile.js中,我的配置非常简单:

options: {
    moduleIds: true,
    modules: 'amd',
    blacklist: ['strict']
}

我做错什么了吗

经过进一步的挖掘,我终于意识到我错在哪里了

在我当前的堆栈中,我被迫使用Almond,而不是RequireJS。因此,Almond希望有一个文件来初始化模块,因此我希望Babel为我生成一个文件。但是事实证明,Babel生成的代码在RequireJS中可以很好地工作,但是为了让它与Almond一起工作,我需要创建一个单独的ES5JS文件,只是初始化Babel生成的文件

大概是这样的:

requirejs(['square'],
    function (square) {
        var myValue = square(2);
        console.log(myValue);
    }
);
requirejs(['app'],
    function (app) {
        app();
    }
);

实际上我不明白你有什么问题?我认为你的巴贝尔编译的代码毕竟是有效的。用这种方式编译代码对巴贝尔来说很方便。嗨,阿莱兹,谢谢你的回复。也许是我缺乏这方面的经验,但我知道define()只有在存在“导出”时才能生成?如果只有一个“导入”,则会生成一个requirejs()。