天天看點

exports和module.exports的差別exports導出的是一個執行個體對象。module.exports導出的是對象本身

exports導出的是一個執行個體對象。

要調用導出的方法或者屬性時,要用目前執行個體對象去調用。如下述代碼中,導出的是builds對象,使用getAllBuilds方法時要調用此方法。

exports.js 

const builds = {
  // Runtime only (CommonJS). Used by bundlers e.g. Webpack & Browserify
  'web-runtime-cjs-dev': {
    entry: 'web/entry-runtime.js',
  },
  'web-runtime-cjs-prod': {
    entry: 'web/entry-runtime.js',
  },
  // Runtime+compiler CommonJS build (CommonJS)
  'web-full-cjs-dev': {
    entry:'web/entry-runtime-with-compiler.js',
  }
}


exports.getAllBuilds = () => Object.keys(builds);
           

test.js 

let builds = require('./export');

console.log(builds);
console.log("-------------------");
console.log(builds.getAllBuilds);
console.log("-------------------");
console.log(builds.getAllBuilds());
           

執行結果:

exports和module.exports的差別exports導出的是一個執行個體對象。module.exports導出的是對象本身

module.exports導出的是對象本身

如下述代碼中,導出的就是一個Function,可以直接執行

exports.js 

const builds = {
  // Runtime only (CommonJS). Used by bundlers e.g. Webpack & Browserify
  'web-runtime-cjs-dev': {
    entry: 'web/entry-runtime.js',
  },
  'web-runtime-cjs-prod': {
    entry: 'web/entry-runtime.js',
  },
  // Runtime+compiler CommonJS build (CommonJS)
  'web-full-cjs-dev': {
    entry:'web/entry-runtime-with-compiler.js',
  }
}

module.exports = () => Object.keys(builds);

// exports.getAllBuilds = () => Object.keys(builds);
           

test.js 

let builds = require('./export');

console.log(builds);
console.log("-------------------");
console.log(builds());
           

執行結果:

exports和module.exports的差別exports導出的是一個執行個體對象。module.exports導出的是對象本身

說明:

exports和module.exports不要同時使用,否則,module.exports會覆寫exports.即exports失效。