从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)

结果:


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.jsexport function area(radius) { return Math.PI * radius * radius;}export function circumference(radius) { return 2 * Math.PI * radius;}// main.jsimport { 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.jsexport 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 =语法定义一个模块的导出对象。 这里的对象一词指的是类,接口,命名空间,函数或枚举。

相关文章