模块化 commonJS
介绍
是主要为了JS在后端的表现制定,commonJS 是个规范 nodejs / webpack 是一个实现
ECMA 是个规范 js / as 实现了他
其他模块化规范:seajs.js / require.js CMD/AMD/UMD es5
作用
是变量具有文件作用域,不污染全局变量
系统模块
http
fs
querystring
url
输入
require('模块名')
require('模块名').xx 按需引用
不指定路径:先找系统模块-> 再从项目环境找node_modules|bower_components (依赖模块)->not found
指定路径 : 找指定路径 -> not found
支持任何类型
输出
exports.自定义属性 = 值 | any
批量输出 都是属性
可输出多次
module.exports = 值 | any
只能输出一次
注意
commonJS 是 nodejs 默认模块管理方式,不支持es6的模块化管理方式,但支持所有es6+语法
例子:
mod/a.js
let a =10;
//要想在别的文件中使用 a 变量 需要 exports导出
let b = "abc"
let fn =()=>{
console.log("我是一个函数")
}
exports.aa =a//aa是自己定义的名字
exports.b =b
exports.fn = fn
mod/b.js
let a =10;
//要想在别的文件中使用 a 变量 需要 exports导出
let b = "abc"
let fn =()=>{
console.log("我是一个函数")
}
//一个Person 类
class Person{
constructor(){
console.log("person")
}
show(){
console.log("show")
}
}
//exports 导出
// exports.aa =a//aa是自己定义的名字
// exports.b =b
// exports.fn = fn
// module.exports = a //10
// module.exports = b //abc
module.exports ={
a:a,
b:b,
fn:fn,
Person:Person
}
//对象中 key = value key可以省略 例如a:a 可以直接写为 a
index.js
//引入 a.js文件
// let a = require("./a")//a.js 的.js可以不写
//路径问题 如果 a.js放在别的路径下 需要修改路径
// let a =require("./mod/a")//现在a.js 在 mod文件夹下
// console.log("a",a)
// a.fn()
//引入 b.js文件
let b =require("./mod/b")
// console.log(b)
let person = new b.Person()
person.show()
NPM
作用
帮助你安装模块(包),自动安装依赖,管理包(增,删,更新,项目所有包)
安装到全局环境
- 安装到电脑系统环境下
- 使用时在任何位置都可以使用
- 被全局安装的通常是:命令行工具,脚手架
npm i 包名 -g 安装
npm uninstall 包名 -g 卸载
安装到项目环境
只能在当前目录使用,需要使用npm代运行
初始化项目环境
npm init
初始化npm管理文件package.json
package-lock.json 文件用来固化依赖
{
"name": "npm", //项目名称
"version": "0.0.1", //版本
"description": "test and play", //描述
"main": "index.js", //入口文件
"dependencies": { //项目依赖 上线也要用
"jquery": "^3.2.1"
},
"devDependencies": { //开发依赖 上线就不用
"animate.css": "^3.5.2"
},
"scripts": { //命令行
"test": "命令行",
},
"repository": { //仓库信息
"type": "git",
"url": "git+https://github.com/alexwa9.github.io/2017-8-28.git"
},
"keywords": [ //关键词
"test",'xx','oo'
],
"author": "wan9",
"license": "ISC", //认证
"bugs": {
"url": "https://github.com/alexwa9.github.io/2017-8-28/issues"//问题提交
},
"homepage": "https://github.com/alexwa9.github.io/2017-8-28#readme"//首页
}
项目依赖
只能在当前项目下使用,上线了,也需要这个依赖 --save
//安装
npm i 包名 --save
npm install 包名 -S
npm install 包名@x.x.x -S
//卸载
npm uninstall 包名 --save
npm uninstall 包名 -S
开发依赖
只能在当前项目下使用 ,上线了,依赖不需要了 --save-dev
npm install 包名 --save-dev
npm install 包名 -D
查看包
npm list 列出所有已装包
npm outdated 版本对比(安装过得包)
npm info 包名 查看当前包概要信息
npm view 包名 versions 查看包历史版本列表
安装所有依赖
npm install
安装package.json里面指定的所有包
版本约束
^x.x.x 约束主版本,后续找最新
~x.x.x 保持前两位不变,后续找最新
* 匹配任何版本
x.x.x 定死了一个版本
选择源
npm install nrm -g 安装选择源的工具包
nrm ls 查看所有源
nrm test 测试所有源
nrm use 切换源名
发布包
- 官网 注册
- 登录
-
npm login
登录 - 输入 user/password/email
-
- 创建包
npm init -y
- 创建入口index.js
- 编写,输出
- 发布
npm publish
- 迭代
- 修改版本号
npm publish
- 删除
npm unpublish
包的发布、迭代、删除,需要在包目录下进行
删除包,有时需要发送邮件
YARN
安装
注意:为省事,不要用npm i yarn -g,去安装yarn,而是去下载压缩包,保证注册表和环境变量的硬写入,后期通过yarn安装全局包时方便
使用
初始化一个新项目
yarn init
添加依赖包
yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]
将依赖项添加到不同依赖项类别中
分别添加到 dependencies
,devDependencies
、peerDependencies
和 optionalDependencies
类别中:
yarn add [package] --save | -S
yarn add [package] --dev | -D
yarn add [package] --peer
yarn add [package] --optional
升级依赖包
yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
移除依赖包
yarn remove [package]
安装项目的全部依赖
yarn
或者
yarn install
安装到全局
yarn global add [package] //global的位置测试不能变
yarn global remove [package]
BOWER
安装bower
npm install -g bower
安装包到全局环境
bower i 包名 -g 安装
bower uninstall 包名 -g 卸载
安装包到项目环境
初始化项目环境
bower init
bower.json 第三方包管理配置文件
项目依赖
只能在当前项目下使用,上线了,也需要这个依赖 --save
//安装
同npm
bower install 包名#x.x.x -S 指定版本使用#
//卸载
同npm
开发依赖
只能在当前项目下使用 ,上线了,依赖不需要了 --save-dev
同npm
EXPRESS
nodejs库,不用基础做起,工作简单化,点击进入官网,类似的还有 koa
特点
二次封装,非侵入式,增强形
搭建web服务
let express=require('express')
let server=express()
let server.listen(端口,地址,回调)
静态资源托管
server.use(express.static('./www'));
例子:
//引入 express框架
const express = require("express")
//创建 web服务器
const app = express()
//监听端口
app.listen(3000,"localhost",()=>{
console.log("监听端口3000")
})
//资源托管
// express.static("")
app.use(express.static("./www"))
//处理接口响应
app.get("/api/goods",(req,res)=>{
console.log("godds接口")
res.end()
})