Node.js 蚕食计划(一)—— 模块化编程

众所周知,Node.js 的出现造就了全栈工程师,由于它让 JavaScript 的舞台从浏览器扩大到了服务端node

而 Node.js 的强大也得益于它庞大的模块库,因此学习 Node.js 第一步还得从模块开始~npm

 

1、安装 Node.js 和 npmjson

Node.js 中文网下载合适的安装包浏览器

安装的过程十分简单,只须要一直点 next 就行。安装 node.js 的同时会自带 npm (node package manager) app

安装完成后,使用命令行工具输入 node -vnpm -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 = *  这种方式来输出

相关文章
相关标签/搜索