从nodejs,es6,typescript方面去弄清楚exports,require,export,import,export=

nodejs中的module.exports 与 require

list.js

exports.f = function(f){}
module.exports.hello = "hello"

console.log(module)

index.js

const a = require('./list')
console.log(a)

结果:

从nodejs,es6,typescript方面去弄清楚exports,require,export,import,export=
Module {
  id: 'D:\\DEV\\nodejs\\list.js',
  exports: { f: [Function], hello: 'hello' },
  parent:
   Module {
     id: '.',
     exports: {},
     parent: null,
     filename: 'D:\\DEV\\nodejs\\index.js',
     loaded: false,
     children: [ [Circular] ],
     paths:
      [ 'D:\\DEV\\nodejs\\node_modules',
        'D:\\DEV\\node_modules',
        'D:\\node_modules' ] },
  filename: 'D:\\DEV\\nodejs\\list.js',
  loaded: false,
  children: [],
  paths:
   [ 'D:\\DEV\\nodejs\\node_modules',
     'D:\\DEV\\node_modules',
     'D:\\node_modules' ] }
{ f: [Function], hello: 'hello' }
View Code

 

注意:exports快捷方式其实就是exports指向了module.exports。module.exports 可以直接赋值。以上例子a = module.exports

ES2015中export,import,impot * as xx, export default

导出导入的对应关系如下:

// circle.js

export function area(radius) {
  return Math.PI * radius * radius;
}

export function circumference(radius) {
  return 2 * Math.PI * radius;
}


// main.js

import { area, circumference } from './circle';

console.log('圆面积:' + area(4));
console.log('圆周长:' + circumference(14));
import * as circle from './circle';

console.log('圆面积:' + circle.area(4));
console.log('圆周长:' + circle.circumference(14));

export default

// export-default.js
export default function () {
  console.log('foo');
}

// import-default.js 可以自定义名字
import customName from './export-default';
customName(); // 'foo'

typescript

export =import = require()

CommonJS和AMD的环境里都有一个exports变量,这个变量包含了一个模块的所有导出内容。

CommonJS和AMD的exports都可以被赋值为一个对象, 这种情况下其作用就类似于 es6 语法里的默认导出,即 export default语法了。虽然作用相似,但是 export default 语法并不能兼容CommonJS和AMD的exports

为了支持CommonJS和AMD的exports, TypeScript提供了export =语法。

export =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。

上一篇:exports和module.exports的区别


下一篇:nodejs深入浅出读书笔记(二)