requirejs内置了exports了吗?
我在使用 babel 来将 es6 的模块代码转换为符合 AMD 规范的代码:
// .babelrc
{
"env": {
"production": {
"presets": ["es2015"],
"plugins": ["transform-runtime"]
},
"develop": {
"presets": ["es2015"],
"plugins": ["transform-runtime", "transform-es2015-modules-amd"]
}
}
}
// modules.js
function Modules(name) {
this.name = name;
}
Modules.prototype.say = function () {
console.log(this.name);
}
export default Modules;
// babel 编译后的代码
define(["exports"], function (exports) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function Module(name) {
this.name = name;
}
Module.prototype.say = function () {
console.log(this.name);
};
exports.default = Module;
});
require.config({
baseUrl: './dist',
path: {
modules: 'modules.js',
}
})
require(['modules'], function (Modules) {
console.log(Modules); // {__esModule: true, default: ƒ}
const man = new Modules.default('bob');
man.say(); // always has value
})
问题1: 我看到这种写法不是定义个一个依赖exports的模块么? 但是 exports 这个模块并没有啊?这样为什么不会报错呢?
问题2: babel 编译后的代码里,定义的模块的回调函数里没有 reuturn
任何值, 为什么我在 main.js 中还能引入 这个模块的代码呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
其实两个问题都和
exports
有关以上是babel转换过后的代码,其中第一行就定义了一个
exports
,相当于是定义了一个供外部引用的空对象。所以可以在
exports
上定义一个属性,然后引用这个模块时也可以获取到这个属性。requirejs应该内置了exports这个模块,函数执行的时候,这个对象会传进来。
不用return,是应为 main.js 使用的模块中导出的值,不需要return。