exports 与 module.exports 的区别

我的梦境 提交于 2021-01-04 09:39:33

CommonJS 模块 

  1. module.exports 初始值为一个空对象 {}
  2. exports 是 module.exports 的引用,不能直接改变引用, 比如  exports = funA
  3. require() 返回的是 module.exports 而不是 exports。故两者选其一时,使用 module.exports
  4. 当 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')
    }
  },
...

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!