require与 import
2018-07-26 本文已影响0人
天涯笑笑生
一、exports...require...
- CommonJS 模块
- 由Nodejs 提供,每个文件都被视作独立的模块
- 模块被 Node.js 包装在一个函数中,因此模块内的本地变量是私有的
-
module.exports
属性可以被赋予一个新的值(例如函数或对象) - 想要获得调用
require()
时加载的确切的文件名,使用require.resolve()
函数 -
exports
输出的是值的缓存,不存在动态更新
util.js file
const value = 'util'
exports.fun1 = (v) => 'fun1-'+'v:'+v+'-value:'+value
exports.fun2 = (v) => 'fun2-'+'v:'+v+'-value:'+value
people.js file
// 赋值给 `exports` 不会修改模块,必须使用 `module.exports`
module.exports = class People {
constructor(name, age) {
this.name = name;
this.age = age;
}
toString() {
return 'name:'+this.name+' age:'+this.age;
}
}
Test5.js file
//nodejs require 测试
const util = require('./util');
const People = require('./people');
console.log(util.fun1('parameter'))
console.log(util.fun1('parameter'))
const people = new People('Jony', 28);
console.log(people.toString());
require 测试结果
二、export...import...
- ES6 模块
//按需导入
import {
Switch,
HashRouter as Router,
Route
} from 'react-router-dom';
- 如上例,称为“编译时加载”或者静态加载,效率要比 CommonJS 模块高
-
export
对外提供接口,阮一峰举例
// 报错
export 1;
// 报错
var m = 1;
export m;
// 写法一
export var m = 1;
// 写法二
var m = 1;
export {m};
// 写法三
var n = 1;
export {n as m};
// 报错
function f() {}
export f;
// 正确
export function f() {};
// 正确
function f() {}
export {f};
-
export
语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。
export var foo = 'bar';
setTimeout(() => foo = 'baz', 500);
//上面代码输出变量foo,值为bar,500 毫秒之后变成baz
-
export default
为模块指定默认输出,import
后面可以指定任意名字