众所周知,Node.js 的出现造就了全栈工程师,由于它让 JavaScript 的舞台从浏览器扩大到了服务端node
而 Node.js 的强大也得益于它庞大的模块库,因此学习 Node.js 第一步还得从模块开始~npm
1、安装 Node.js 和 npmjson
在 Node.js 中文网下载合适的安装包浏览器
安装的过程十分简单,只须要一直点 next 就行。安装 node.js 的同时会自带 npm (node package manager) app
安装完成后,使用命令行工具输入 node -v 和 npm -v,若是能显示出版本号,就说明安装成功。异步
而后输入 node 进入环境,就能够运行 JavaScript 语句了ide
连按两次 Ctrl+C 就能退出 Node.js 环境函数
2、建立模块工具
上面只是在命令行中运行 Node 程序,在实际开发的时候须要一个集成开发环境学习
我通常使用 Visual Studio Code 做为开发工具,具体的环境搭建能够参考廖雪峰大神的视频讲解
手动建立一个项目结构:
其中 app.js 是入口文件,wise_module 用来存放模块, .vscode 是开发工具生成的配置目录
而后在 wise_module 目录下建立 hello.js
// hello.js
'use strict'; function hello(name) { console.log('hello', name); } module.exports = hello;
这个 hello.js 就是一个模块,经过 module.exports 将函数 hello 做为输出结果暴露出来
别的模块就可以经过 require 引入 hello 函数:
// app.js
'use static'; let hello = require('./wise_module/hello'); hello('wise wrong');
运行结果:
3、深刻解析 require
能够看到 app.js 中的 require 后面接的是相对路径
若是改为这样:
就会提示找不到对应模块
这是由于在没有具体路径的时候,require 会首先检查 node.js 核心模块(如 "fs"),
而后检查 node_modules,最后检查环境变量 NODE_PATH 指定的目录
这里咱们能够新建一个 node_modules 文件夹,将 hello.js 挪过去
这时就能正常运行了
上面的 hello 模块是一个 js 文件,若是 hello 是一个文件夹,就须要在目录下建立一个 index.js 做为模块的入口
实际项目中,node_modules 是由 package.json 生成,里面用来存放第三方依赖库
本身开发的模块仍是须要放到其余文件目录下,而后经过 require( /*相对路径*/ ) 引入
在 Node 这个由异步操做构成的环境中,require 是少有的几个同步 I/O 操做之一
为了不堵塞,建议只在程序最初加载的时候使用 require,在程序中 I/O 密集的地方就要避免使用。
4、模块的两种导出方式
把上面示例中 hello.js 放回 wise_module 目录,而后把导出方式改写一下:
用 exports 这种方式导出的时候,将 hello 函数做为导出对象的一个键值给暴露出来
在 app.js 中调用的时候就须要这样调用:
若是把导出的代码改成下面这样,也能正常工做
看起来 exports 变量和 module.exports 变量彷佛是同一个变量
但实际上仍是有些区别,好比 exports 不能直接赋值
这是由于 exports 只是对 module.exports 的一个全局引用,会在程序加载时初始化为一个空对象
而这个对象 exports 不能被赋值或者重写,那样 exports 就再也不指向 module.exports
不过 module.exports 就没有这个顾虑,能够随意的赋值重写
在须要导出多个模块的时候,还能够这么写:
exports 做为 module.exports 的衍生产物,虽然能够应对大多数状况,但仍有不足之处
因此模块导出的时候,建议使用 module.exports = * 这种方式来输出