CommonJS 模块
- module.exports 初始值为一个空对象 {}
- exports 是 module.exports 的引用,不能直接改变引用, 比如 exports = funA
- require() 返回的是 module.exports 而不是 exports。故两者选其一时,使用 module.exports
- 当 module.exports 指定新值时,不再使用先前的别名 exports
这里理解指针(exports的指针没有改变时,操作的是内存块。
//utils.js
let a = 100;
console.log(module.exports); //能打印出结果为:{}
console.log(exports); //能打印出结果为:{}
exports.a = 200; //这里辛苦劳作帮 module.exports 的内容给改成 {a : 200}
exports = '指向其他内存区'; //这里把exports的指向指走
//test.js
var a = require('/utils');
console.log(a) // 打印为 {a : 200}
用法 1
exports = module.exports = somethings
上面的代码等价于
module.exports = somethings
exports = module.exports
即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports。
用法 2
声明多个 exports.xxx 后接函数方法。导出一个对象。
exports.assetsPath = function (_path) {
var assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {
options = options || {}
var cssLoader = {
loader: 'css-loader',
options: {
minimize: process.env.NODE_ENV === 'production',
sourceMap: options.sourceMap
}
}
用法 3
声明一个module.exports 指向一个对象或者已经声明的变量。导出本身。
module.exports = {
entry: {
app: './src/main.js'
},
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': resolve('src')
}
},
...
来源:oschina
链接:https://my.oschina.net/u/3053700/blog/1492444