Node 模块
Node.js 的模块可以是 JavaScript文件、JSON文件,还可以是变异过的C/C++文件,可以被引用、创建和自定义。
系统模块
通过 Node.js 官方 API 可以看到 Node.js 自身带有很多系统模块,这些系统模块被编译成二进制文件,可以用 require 语句去获取,核心模块具有最高的加载优先级。
- Buffer 用于实现二进制数据的存储和转换
- Cluster 用于实现多进程
- Console 用于控制台输出信息
- Crypto 用于实现数据的加密解密处理
- Events 用于为事件处理提供基础类
- Fs 用于操作文件及文件系统
- Http 用于实现 http 服务
- Net 用于实现 TCP 服务
- OS 用于获取操作系统信息
- Util 用于实现各种使用函数
- Zlib 用于实现压缩和解压
创建和加载模块
Node.js饿模块创建方式非常简单,创建一个 JavaScript 文件,然后用 exports 或者 module.exports 导出模块。模块中可以多次使用 exports 导出属性或者函数,但是 module.exports 只能导出一次属性或者函数。exports 相当于在导出对象上挂属性,modules.exports 相当于给导出对象重新赋值。
引用模块使用 require 函数需要遵循如下规则:
- 引用相同目录下的模块,路径要以 ./ 开头,文件的后缀名可以忽略。
- require 函数不支持通配符表达式
- require 函数可以卸载任何需要的地方,不必是文件的开头部分
- 引用系统模块不用写路径和后缀名
- 使用 exports 导出
user.js
let username = "Jax";
exports.username = username;
let sayHello = () => console.log('hello');
exports.sayHello = sayHello;
index.js
let user = require('./user.js');
console.log(user.username);
user.sayHello();
- 使用 module.exports 导出
user.js
let username = "Jax";
exports.username = username;
let sayHello = () => console.log('hello');
exports.sayHello = sayHello;
module.exports = {
username: "Jax",
sayHello: () => console.log('hello')
}
index.js
let user = require('./user.js');
console.log(user.username);
user.sayHello();
外部模块(包)
在 Node.js 中,包和模块并没有本质的不同,包是模块的基础上更深一步的抽象,包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。包通常是一些模块的集合,在模块的基础上提供了更高层的抽象,相当于提供一些固定接口的函数库。
每个项目的根目录下面,一般都会有package.json文件,定义了这个项目中所需各种模板及项目中的配置信息。主要有以下参数:
- name:项目名称
- deecription:应用项目描述
- version 版本号
- config:应用的配置项
- author:作者
- respository:资源仓库地址
- licenses:授权方式
- main:应用入口文件
- dependencries:项目应用运行依赖模块
- devDependencies:项目应用开发环境依赖
完整配置如下:
{
//项目名称
"name": "demo",
//版本号(遵守“主版本.次要版本.补丁号”的格式
"version": "1.0.0",
//description描述你的模块,或者搜索
"description": "vue.js js iview ",
//main字段指定了加载的入口文件,即主文件
"main": "app.js",
// scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm start时,所要执行的命令。
"scripts": {
"start": "node index.js"
},
//repository(仓库)指定一个代码存放地址
"repository": {
"type": "git",
"url": "git+https://github.com/XXXX"
},
//作者
"author": "mayuan",
//授权方式
"license": "MIT",
//指明node.js运行所需要的版本
"engines": {
"node": "0.10.x"
},
"bugs": {
"url": "https://github.com/XXXX"
},
// 一个字符串数组,方便别人搜索到本模块
"keywords": [
"vue","iview"
],
//devDependencies指定项目开发所需要的模块
"devDependencies": {
"babel-core": "^6.23.1",
"babel-loader": "^6.3.2",
"babel-preset-es2015": "^6.22.0",
"vue-html-loader": "^1.0.0",
"vue-loader": "^8.5.2",
"vue-style-loader": "^1.0.0",
"webpack": "^1.13.2"
},
//dependencies字段指定了项目运行所依赖的模块
"dependencies": {
"express": "latest", //指定express是最新版本
"mongoose": "~3.8.3",
"handlebars-runtime": "~1.0.12",
"express3-handlebars": "~0.5.0",
"MD5": "~1.2.0"
}
}
npm 是随同 Node.js 一起安装的包管理工具。以下是一些常用的 npm 命令:
- 查看版本号
npm -v
- 创建包管理的描述文件 package.json
npm init
- 依据 package.json 下载项目所依赖的包
npm install
- 下载全局依赖包,全局包不仅仅可以在当前项目使用,还可以在整个本机上使用
npm install <packageName> -g
# 全局安装有可能会出现没有权限的情况就要加 sudo
sudo npm install <packageName> -g
- 在当前项目下载依赖包
# 下载了在 package.json 不会有记录
npm install <packageName>
# 在 package.json 的 dependencies 属性中有记录
npm install <packageName> --save
# 在 package.json 的 devDependencies 属性中有记录
npm install <packageName> --save-dev
- 使用淘宝镜像
sudo npm install cnpm -g
然后使用 cnpm 替代 npm 使用