Javascript 使用Babel将ES6模块转换为ES5 AMD模块,未按预期工作
我希望有人能帮忙 我正在使用grunt babel将我的ES6模块代码转换为ES5 AMD模块代码。以下是我的ES6代码: multiply.jsJavascript 使用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
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()。