npm重要知识点梳理
Posted lztl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了npm重要知识点梳理相关的知识,希望对你有一定的参考价值。
一、npm配置
运行npm config ls 可查看npm的配置信息
registry: 一个查询服务地址。npm模块下载和更新时,模块压缩包的下载地址需要通过访问该路径来获得。例如设置该路径为国内镜像:npm config set registry https://registry.npm.taobao.org
访问该路径+模块名,就会返回包含模块详细信息的json。
cache:缓存目录地址。模块安装或更新时会将压缩包存放在该目录,再解压到项目中的node_modules目录下。修改命令:npm config set cache *
prefix:全局安装地址。修改命令:npm config set prefix *
二、package.json的关键字段
1、scripts : 定义脚本命令
该字段为一个结构如下的对象:
{ ‘命令名‘: ‘脚本‘, ... }
其中的脚本支持Shell能执行的脚本。
执行 ‘npm run + 命令名‘ 时就会执行该命令名对应的脚本。
同时执行多个语句可以使用符号& :
npm run command1 && npm run command1
一个指令执行完才能执行下一个的话用&& :
npm run command1 && npm run command1
如果需要在执行一条命令之前或之后自动执行其他命令,可以使用npm钩子
npm 脚本有pre
和post
两个钩子,例如执行npm run build
的时候,会自动按照下面的顺序执行:
npm run prebuild && npm run build && npm run postbuild
所以通过定义prebuild或postbuild所对应的脚本,就可以让它们在build命令的前后执行。
定义脚本命令的好处是使项目的命令更具一致性。
2、模块信息相关字段
name:包的名称,必须的字段。如果是发布的包那么不能和现有的npm模块名重复。
version:版本号。它与name字段构成模块的唯一标志。
keywords:关键词数组
description:模块的简单描述。和keywords都是和搜索有关
3、main
入口文件,指定了别人使用require加载模块时载入的文件。如果你的模块对外暴露了API,那么该字段至关重要,它指定了模块的入口。
4、license
开源许可证,一种法律许可,确定作者和用户的权利和限制。
5、config
项目的一些配置信息,可以将相对固定的信息存在该字段中。
6、dependences与devDependences
前者为项目生产环境依赖的包,后者为开发过程中所依赖的包,上线之后就用不到了,也不会被打包至生产环境,例如测试和打包工具等依赖包;
前者安装命令为npm install 模块名 --save,后者为npm install 模块名 --save-dev
7、npm中的变量
项目文件中可以使用 process.env.npm_package 访问到package.json中的字段,
如使用 process.env.npm_package_version 可以访问version字段。
而在脚本命令中的访问方式则是:$npm_package_version。此外,npm脚本还可以通过$npm_config_前缀直接
访问config字段的信息
例如config字段如下:
"config" : { "port" : "8080" }
那么在脚本中可以使用 $npm_config_port 来访问。
三、其它有用的命令
// 查看版本 npm -v
// 安装指定版本模块
npm install --save 模块名@版本号 // 更新npm至最新版本 npm install [email protected] -g
// 更新模块
npm update <package>
// 清除npm本地缓存
npm cache clear
// 删除文件,解决文件路径过长而无法删除的问题 先安装npm install rimraf -g
rimraf node_modules
// 强制重新安装
npm install <package> --force
四、package-lock.json文件
这是项目依赖包发生变化时自动生成的文件,用于记录当前的依赖包和版本,保证项目在每一次安装时都能够下载到相同版本的包,避免因版本更新而造成的兼容性问题。它比package.json记录更多的版本细节。
执行npm install时会根据package.json去安装依赖。而执行npm i 时,如果改了package.json而且package.json和lock文件不同,那么npm会根据package中的版本号以及语义含义去下载最新的包,并更新至lock。如果两者是同一状态,那么执行npm i 都会根据lock下载,不会理会package实际包的版本是否有新。
以上是关于npm重要知识点梳理的主要内容,如果未能解决你的问题,请参考以下文章
207期19张图带你梳理SpringCloud体系中的重要知识点!