npm介绍
npm有两种含义 :
第一种: 包管理工具node package manager
第二种:npm网站代码托管平台
1.npm
全称node package manager
官方推出的包管理工具
不需要额外安装,安装node之后自带
因为服务器不在国内,所以有时候安装特别慢,甚至无法成功
-
类似于gitthub,是一个全球免费的代码托管平台
与github不同点
github : 支持任何编程语言,任何平台
npmjs : 只为nodejs服务
npm使用流程
初始化、安装、导入使用
1.初始化:在当前nodejs项目中执行终端命名:
npm init -y
作用:生成一个
pachage.json
文件,帮你记录当前项目安装了哪些第三方模块及对应的版本号
2.安装:在当前nodejs项目中执行终端命名:
npm install 模块名
安装之后,你的项目目录会新增两个文件
node_modules
与package-lock.json
node_modules
:npm会自动将所有的第三方模块放入这个文件夹中。类似于前端的lib文件夹
package-lock.json
:npm会自动记录第三方模块的下载地址,下一次安装或更新的时候直接从这个地址下载,速度更快(只是影响以后更新速度,不影响开发)package.json
:帮你记录当前项目安装了哪些第三方模块及对应的版本号
3.注意点:
(1)使用npm
文件夹路径
不能有中文(2) 如果网速很慢导致无法安装第三方模块,建议 更改npm镜像源为淘宝服务器
npm config set registry https://registry.npm.taobao.org/
查看当前npm得镜像源:
npm config list
npm init -y
原理
1.作用: 快速初始化包,创建
package.json
文件2.package.json文件 : 项目中用到了哪些依赖包,以及包名、版本号
只要你下载了包,这个文件就会记录你下载哪些包,和下载的版
npm i 包名
原理
1.访问npm服务器
2.从npm服务器搜索包
3.搜索到之后,找包的仓库地址
4.下载包到你目录的node_module文件
5.会把包地址放入package.lock.json文件,用于更新提高速度
默认情况下,所有包都会自动下载最新版本.如果想下载指定版本,就可以使用命令
npm i 包名@版本号
npm包三个组成部分详解
1.package.json : 记录项目所有下载过的依赖包及对应的版本号
相当于下载记录
2.node_module : 存放包源文件的目录
相当于下载文件夹
3.package.lock.json : 记录所有的依赖包的下载地址和版本
相当于网页收藏夹
作用: 提高更新包的效率(第一次下载包之后,npm会把每一个包的下载地址存在package.lock.json文件中。 下一次下载的时候,无需从npm搜索,而是直接从上一次地址去下载)
全局包与本地包
1.本地包:
npm i 包名
在哪里执行命令,就在哪个文件夹安装
只对这个文件夹生效
2.全局包:
npm i 包名 -g
无论在哪里执行命令,都会装到你的C盘根目录
对整个操作系统生效,任何时候都能使用
例如:
npm i nodemon -g
3.小经验
本地包一般是用于做项目开发的,主要是导入写代码的
全局包一般是工具类(像vscode插件一样),主要是为你开发提供工具遍历的
nodejs里面的nodemon
vue里面的vue/cli
开发依赖与生产依赖
1.下载包的时候,有两种选择: 开发依赖 与 生产依赖
默认情况下,我们所有的包都会选择生产依赖
2.什么是开发依赖,什么是生产依赖
开发依赖: 只在开发的时候会用到,到了生产(上线)环境用不上
生产依赖:上线之后也需要使用
3.如何选择生产依赖还是开发依赖
不纠结,一般包的官网会有命令。 你按它的CV就可以了
gulp-htmlmin。这个工具是用来把html代码进行压缩的(去掉空格,换行等),我们需要在开发时使用它,而项目一旦上线,我们就不再需要它了。,因此将它归类为"开发依赖"。
axios。在开发时参与源码编写,在发布上线的生产环境中也是需要它的。不仅在开发环境编写代码时要依赖它、线上环境也要依赖它,因此将它归类为"生产依赖"。
ES6官方模块化规范
默认导入导出
按需导入导出
const eat = function () {
console.log('吃东西')
}
const age = 20
//默认导出,只能导出一次
export default {
eat,age
}
//按需导出: 可以导出多次
export const sex = '男'
export const score = 88
//JS文件
//默认导入: 变量名可以自定义
//a: 先执行路径中的js代码 b: 得到JS文件内部的导出对象
import obj from './2.mokuai.js'
console.log(obj)
//按需导入: 变量名必须与导出的变量名一致
//自定义按需导入对象名: { 导出变量名 as 导入变量名}
import { sex as a } from './2.mokuai.js'
console.log(a)
import { sex,score } from './2.mokuai.js'
console.log(sex,score)
//JS文件
<script src="./1.index.js" type="module"></script> //html文件
不可以,只能写一次export default
可以写多次吗?
可以,但是要分开导入。实际开发中不建议同时使用export default
和export
可以写在同一个文件中吗?导入通过
export
导出的模块,名字有要求吗?有要求,如果是export导出,默认导入变量名要与导出的一致
如果是
export default
,则变量名可以随便写
如果要给
asexport
导出的模块起别名,使用哪个关键字?