包管理工具之一——npm

基于node工程

  • 包(项目,工程)

    • 概念
    • 1、在Node.js语言中,包和模块并没有本质的不同,包是在模块的基础上更深一步的抽象。
    • 2、包将某个独立的功能封装起来,用于发布、更新、依赖管理和进行版本控制。
    • 3、Node.js根据 CommonJS 规范实现了包机制,开发了 npm 来解决包的发布和获取需求。
  • 包的说明文件(package.json)

    • 使用package.json能干什么
      • 1、相当于你本地项目的一个文档说明。
      • 2、允许你指定你项目中所使用的node包的版本。
      • 3、构建你的项目更加容易,便于给其他人共享。
  • package.json属性详解

    • 本质:json对象
    {
      "name": "npm_command", //包名
      "version": "1.0.0", //版本
      "scripts": { //配置npm运行命令
        "start": "node bin/www"
      },
      "dependencies": {//运行依赖的包
        "jquery": "^3.2.1"
      },
      "devDependencies": {//开发依赖的包
        "babel": "^6.23.0"
      }
    }
    
    • 扩展:
    "jquery": "^3.2.1" -----向上的尖括号可以管理二级,三级版本
    "jquery": "~3.2.1" -----波浪线可以管理三级版本。
    

npm简介(包管理工具)

  • 1、Node包管理器(npm)是一个由Node.js官方提供的第三方包管理工具,
  • 2、npm是一个完全由JavaScript 实现的命令行工具,通过Node.js执行,因此严格来讲它不属于Node.js的一部分。
  • 3、在最初的版本中,我们需要在安装完Node.js以后手动安装npm,但从Node.js 0.6开始,npm已包含在发行包中了,安装Node.js时会自动安装npm。现在的版本大都使用6.0以上。
  • NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
    • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
    • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
    • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
  • 查看npm是否安装成功$ npm -v

npm命令详解

  • 使用npm命令来下载依赖模块及对项目包(模块)进行管理
  • 常用命令:
    • npm init: 生成package.json
    • npm install:用来安装package.json里的相关依赖包
    • npm install packageName -g(全局安装packageName)
    • npm install packageName --save 安装包(局部安装packageName—运行依赖)
    • npm install packageName@version --save 安装指定版本的包(局部安装)
    • npm install packageName --save-dev(局部安装–开发依赖)
    • npm info packageName (显示包的信息)
    • npm rm packageName (移除包)
    • npm config get prefix (获取全局安装包的所在地址,并且可见对应的cmd命令)

npm link

  • link相关文档
  • 背景:我们假设项目是 my-project, 需要用到一个独立的 my-utils 模块。新开发或修改的 my-utils 模块,如何在项目中试验?
    • 发布一个 beta 版本
      • 优点:你高兴就好。
      • 缺点: 无趣+无趣+无趣,麻烦+麻烦+麻烦。
    • 使用相对路径安装
    $ cd path/to/my-project
    $ npm install path/to/my-utils
    
      - 优点:简单明了
      - 缺点: 调试过程中往往需要微调,此时需要切换到 my-utils 目录修改,然后反复重新 install,很麻烦;
    
    • 使用软链
    $ cd path/to/my-project/node_modules
    $ ln -s path/to/my-utils my-utils
    
      - 优点:软链后,两边修改直接同步;
      - 缺点: 指令操作麻烦,不同操作系统语法不一样;
    
  • npm link功能:在本地开发npm模块的时候,我们可以使用npm link命令,将npm 模块链接到对应的运行项目中去,方便地对模块进行调试和测试;
  • 基本方法
$ cd path/to/my-project
$ npm link path/to/my-utils
  • 如果这两个目录不在一起,操作方法
$ # 先去到模块目录,把它 link 到全局
$ cd path/to/my-utils
$ npm link
$
$ # 再去项目目录通过包名来 link
$ cd path/to/my-project
$ npm link my-utils

镜像问题

  • 使用npm导致的问题(更多的是针对5.0以下版本)
    • 下载慢
    • 甚至下载不了

cnpm(淘宝镜像)

  • 将npm上的包同步更新到淘宝镜像上,目前是每10分钟同步一次。
  • 配置:npm install -g cnpm --registry=https://registry.npm.taobao.org
  • 修改仓库地址为npm地址:npm config set registry https://registry.npmjs.org/
  • 常用命令:使用 cnpm 代替 npm 即可
  • 问题:
    • 会多下载一些文件/文件夹
    • 严重者会导致 webstorm 瘫痪,就像帕金森综合征
  • 解决上述问题的办法

npm转换国内镜像

  • npm是一个很好用的工具,全名是Node Packet Manager,是一个nodejs的包管理工具,但是美中不足的是当我们去安转包的时候却发现下载的速度太慢,但是没关系,还是有方法的就是利用淘宝的国内镜像,一下是3个设置的方法:

  • 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在):

    • 1.通过config命令
    npm config set registry https://registry.npm.taobao.org 
    npm info underscore (如果上面配置正确这个命令会有字符串response)
    
    • 2.命令行指定npm --registry https://registry.npm.taobao.org info underscore
    • 3.编辑 ~/.npmrc 加入下面内容registry = https://registry.npm.taobao.org
  • 下载vue-cli之后,使用vue提醒vue不是全局变量;

    • 解决方法:将vue.cmd的文件找到之后,复制该路径,添加到环境变量Path中;

##补充扩展

  • 2017年5月30日发布node 8.0,其中自带的npm也由3.xxx版本升级到5.0
  • npm5变化:
    • 通过npm下载包的时候多了一个package.lock.json
    • package.lock.json可以记录整个node-modules中文件夹的树状结构,再次下载的时候不用先去读取包与包之间相关依赖
      • 大白话:就是记录包与包之间的关联(依赖关系)
      • 好处:再次npm install下载的时候不用去先读取依赖可以直接下载,速度较快。
    • 可以利用离线缓存,合理的利用了缓存,提高了下载效率
    • 在速度上还是和yarn有些差异。
  • –save是一个默认属性,npm install下载包的时候会在package.json里显示依赖
  • 注意:npm3和npm5并没有完美对接
  • 如果之前的项目是用npm下载的包,当后期用npm下载其他包的时候之前的包的依赖是无法读取到package.lock.json里,导致之前的包无法使用,此时需要npm install重新下载。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值