Node 入门 - (二)Commonjs规范

147 阅读1分钟

##目录结构

D:.
└─nodejs
  └─commonjs
        index.js
        lib.js

引入文件

引入文件时需要使用require()方法

//index.js
console.log('start require');
require('./lib.js')
console.log('end require');
//lib.js
console.log('hello world')
//terminal
PS D:\Node\nodejs\commonjs> node index.js
start require
hello world
end require

引用结果

当打印 lib 的引用结果可以看到是一个对象

//index.js
console.log('start require');
const lib = require('./lib.js')
console.log(lib); //{}
console.log('end require');

指定引用

可以挂载object function 变量等等

//lib.js
console.log('hello world')
exports.hello = 'world';
//index.js
console.log('start require');
const lib = require('./lib.js')
console.log(lib); //{ hello: 'world' }
console.log('end require');

同一引用

当修改 index.js 为引入的 lib添加一个方法时候,我们在lib中延时打印了exprots对象,可以看到当前引入的对象也发生了改变

//index.js
console.log("start require");
const lib = require("./lib.js");
console.log(lib);
console.log("end require");

lib.add = function (a, b) {
    return a + b;
};

//lib.js
console.log('hello world')
exports.hello = 'world';

setTimeout(() => {
    console.log(exports)
}, 2000)
PS D:\Node\nodejs\commonjs> node index
start require
hello world
{ hello: 'world' }
end require
{ hello: 'world', add: [Function] }

设置引用

当导入lib时,默认会返回exports空对象,如果我们指定返回moudle.exports那么所有挂载到exports对象下面的方法以及属性只会存在于lib中, index中只会接收到module.exports导出的结果

//index.js
console.log("start require");
const lib = require("./lib.js");
console.log(lib);
console.log("end require");

lib.add = function (a, b) {
    return a + b;
};
console.log(lib.hello)
//lib.js
console.log('hello world')
exports.hello = 'world';

module.exports = function say() {
    return 'hello'
}

setTimeout(() => {
    console.log(exports)
}, 2000)
//teminal
PS D:\Node\nodejs\commonjs> node index
start require
hello world
[Function: say]
end require
undefined
{ hello: 'world' }