npm --> node.js package manage(node.js 包管理器)
npm install xxx
/ npm i xxx
下载安装第三方模块到当前文件夹的 node_modules 文件夹中
npm install -g xxx
/ npm i -g xxx
全局下下载安装模块
npm install --save
/ npm i -s
下载安装第三方模块到当前文件夹的 node_modules 文件夹中,并自动把模块名写入 package.json 的 dependencies
npm install --save-dev
/ npm i -d
下载安装第三方模块到当前文件夹的 node_modules 文件夹中,并自动把模块名写入 package.json 的 devDependencies
npm uninstall
删除模块
package.json
{
"name": "nodejs", // 包的名字
"version": "1.0.0", // 版本号
"description": "test", // 介绍描述
"main": "index.js", // 当前模块文件入口
"dependencies": {
// 当前模块所依赖的其他模块
},
"devDependencies": {}, // 当前模块所依赖的并不是运行时需要的模块
"scripts": { // 定义一些命令和命令所做的事
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "kofechen",
"license": "ISC"
}
npm init
创建一个 package.json
npm init -y
不需要设置直接创建一个 package.json
npm run xxx
执行 package.json 中 script 里的某个命令
npm install
自动读取 package.json 把 dependencies 和 devDependencies 中所有的依赖下载下来
dependencies 和 devDependencies 的区别:
dependencies 里写的是运行时所需要用到的模块,而 devDependencies 里写的是开发构建或者测试等一些运行时不需要的模块。
另外,用户 require
本模块时,会将 dependencies 里的运行所依赖的模块下载下来;但是如果用户也想做一些开发构建或者测试,可以通过 npm install
将包括 dependencies 和 devDependencies 所有的模块都下载下来。
package.json 的作用:
本地的 node_modules 可以不需要上传,原因是文件可能过大,上传下载不方便。
别人想要下载并运行我们的代码时,可以在代码中找到 require 的模块,一个个在本地 install,如果模块很多的话,这样做难免很费劲。
但是有了 package.json 文件就很方便了,别人只需要在所在文件夹命令行直接执行 npm install
就可以自动读取 package.json,把 dependencies 和 devDependencies 所有依赖模块都下载下来。
require 模块查找路径
先从当前文件夹下的 node_modules 文件夹去找,找不到再去上一级文件夹查找 node_modules 文件夹并从中去找,如果找不到再逐级往上去找,直到根目录,如果还是找不到就会报错。
通过 npm install -g xxx
安装的模块,不能通过代码中的 require
得到,二者不是同一个东西,各有各的作用。
如果没有全局安装模块,只是安装到当前文件夹,可以直接到所在目录启动,或者通过 npmscripts 命令去执行启动,命令会通过 node_modules/bin 找到相应命令模块去执行,其中 node_modules/bin 中的模块文件是从 安装的模块文件夹/bin 中拷贝过来的。
模块下载速度慢
方案1:更换源版本进行下载
npm install -g xxx --registry=https://registry.npm.taobao.org // 从别的库去下载
方案2:安装一个 nrm 快速切换源版本的工具
npm install -g nrm
nrm ls
nrm use taobao
nrm use npm
切换 node.js 版本 n
可以下载 node.js 最新版本并做一些对应的新旧版本切换
npm install -g n
sudo n stable // 下载最新版本的 node.js
npm vs => yarn
和 npm 类似的工具
但是 yarn 比 npm 快速
NPMScript 范例
在 package.json 下的 script 中加一些命令
{
"scripts": {
"css:autoprefixer": "postcss -u autoprefixer -r dist/css/*",
"css:compress": "csso in.css --output out.css",
"js:lint": "eslint src/js",
"js:uglify": "mkdir -p dist/js && uglifyjs src/js/*.js -m -o dist/js/app.js",
"image:imagemin": "app=imagemin-cli npm run check; imagemin src/images dist/images -p",
"server": "browser-sync start --server --files 'dist/css/*.css, dist/js/*.js'",
"watch": "onchange 'src/js/*.js' -- npm run css:compress",
"start": "npm run server"
}
}
npm run css:autoprefixer
npm start