Nodejs中的require函数的具体使用方法

const version = require("../package.json").version

故引申出对Nodejs中require的学习。

require介绍

在Node.js的文档中,require的相关文档是在Modules目录下,属于Nodejs模块化系统的一部分。

require是一个函数。通过typeof或者Object.prototype.toString.call()可以验证这个结论:

console.log(require) // 输出:Function console.log(Object.prototype.toString.call(require) // 输出:[object Function]

通过直接打印require,可以发现在require函数下还挂载着若干个静态属性,这些静态属性也可以在Nodejs的官方文档中直接找到相关的说明:

{ [Function: require] resolve: { [Function: resolve] paths: [Function: paths] }, main: Module { id: '.', exports: {}, parent: null, filename: '/Users/bjhl/Documents/webpackSource/index.js', loaded: false, children: [], paths: [ '/Users/bjhl/Documents/webpackSource/node_modules', '/Users/bjhl/Documents/node_modules', '/Users/bjhl/node_modules', '/Users/node_modules', '/node_modules' ] }, extensions: [Object: null prototype] { '.js': [Function], '.json': [Function], '.node': [Function] }, cache: [Object: null prototype] { '/Users/bjhl/Documents/webpackSource/index.js': Module { id: '.', exports: {}, parent: null, filename: '/Users/bjhl/Documents/webpackSource/index.js', loaded: false, children: [], paths: [Array] } } }

require函数静态属性

这里之后再详细补充。

require使用

在官网文档中可以看到如下关于require的说明:

require(id)#  Added in: v0.1.13  id module name or path  Returns: exported module content  Used to import modules, JSON, and local files. Modules can be imported from node_modules. Local modules and JSON files can be imported using a relative path (e.g. ./, ./foo, ./bar/baz, ../foo) that will be resolved against the directory named by __dirname (if defined) or the current working directory.

同时还给出了三种require的使用方法:

// Importing a local module: const myLocalModule = require('./path/myLocalModule'); // Importing a JSON file: const jsonData = require('./path/filename.json'); // Importing a module from node_modules or Node.js built-in module: const crypto = require('crypto');

从以上文档中可以得出以下信息:

require接受一个参数,形参名为id,类型是String。

require函数return的是模块到处的内容,类型是任意。

require函数可以导入模块、JSON文件、本地文件。模块可以通过一个相对路径从node_modules、本地模块、JSON文件中导出,该路径将针对__dirname变量(如果已定义)或者当前工作目录。

require实践

在这里将分类讨论require的实践结论。

require导入JSON

JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和 null 。

在文章的开头就提到了通过require("./package.json")文件来读取package.json文件中的version属性。这里将尝试导入info.json文件并查看相关信息。

文件结构目录如下:

. ├── index.js └── info.json

将info.json文件的内容修改为:

{ "name": "myInfo", "hasFriend": true, "salary": null, "version": "v1.0.0", "author": { "nickname": "Hello Kitty", "age": 20, "friends": [ { "nickname": "snowy", "age": 999 } ] } }

在info.json当中,包含了字符串、布尔值、null、数字、对象和数组。

将index.js的内容修改如下并在当前terminal运行命令 node index.js ,得到如下结果:

const info = require("./info.json") console.log(Object.prototype.toString.call(info)) // [object Object] console.log(info.version) // v1.0.0 console.log(info.hasFriend) // true console.log(info.salary) // null console.log(info.author.nickname) // Hello Kitty console.log(info.author.friends) // [ { nickname: 'snowy', age: 999 } ]

可以看到,require导入一个JSON文件的时候,返回了一个对象,Nodejs可以直接访问这个对象里的所有属性,包括String、Boolean、Number、Null、Object、Array。个人猜测这里可能用到了类似于JSON.parse()的方法。

通过这个结论也得出了一种思路,即通过require方法传入JSON文件来读取某些值,如在文章开头中,webpack通过读取package.json文件获取到了version值。

require导入本地js文件

文件结构目录如下:

. ├── index.js ├── module_a.js └── module_b.js

index.js文件中,分别按顺序导入了module_a和module_b并赋值,然后将这两个变量打印,内容如下:

console.log("*** index.js开始执行 ***") const module_a = require("./module_a") const module_b = require("./module_b") console.log(module_a, "*** 打印module_a ***") console.log(module_b, "*** 打印module_b ***") console.log("*** index.js结束执行 ***")

module_a文件中,未指定module.exports或者exports,但是添加了一个异步执行语句setTimeout,内容如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/6dc0bef7b3997ff430270e7326c9bbec.html