美文网首页Angular开发指南前端开发笔记菜鸟学编程
NPM(node package manager)使用、语法介绍

NPM(node package manager)使用、语法介绍

作者: 菜鸟飞不动 | 来源:发表于2019-01-24 23:35 被阅读2次

    npm是每一位前端工程师都必须具备技能,本文结合最新的npm v5讲解npm使用方法,因本人使用windows系统,而原作使用mac系统,所以在命令不同时,会特意提出。

    安装Node.js

    node.js的可以直接去官网下载所需要的版本直接安装即可。对于Linux,也可以直接通过包管理器安装Node。

    检查node的安装位置及版本,win中使用where,linux和mac使用which

    $ which node
    /usr/bin/node
    $ node --version
    v6.10.3
    

    为了证明node安装成功,需要进入node命令控制台试试:

    $ node
    > console.log('Node is running');
    Node is running
    > .help
    .break Sometimes you get stuck, this gets you out
    .clear Alias for .break
    .exit  Exit the repl
    .help  Show repl options
    .load  Load JS from a file into the REPL session
    .save  Save all evaluated commands in this REPL session to a file
    > .exit
    

    Node.js安装成功,就需要检查一下npm:

    $ which npm
    /usr/bin/npm
    $ npm --version
    3.10.10
    

    NPM

    npm可以在局部或全局范围内安装包,在局部范围内,包会安装到根目录下node_modules文件夹下面,属于当前用户的。全局范围的包会安装在{prefix}/lib/node_modules/下,{prefix}通常是/usr/或/usr/local。

    改变全局范围下包的位置

    npm config可以输出安装信息

    $ npm config list
    ; cli configs
    user-agent = "npm/3.10.10 node/v6.10.3 linux x64"
    
    ; userconfig /home/sitepoint/.npmrc
    prefix = "/home/sitepoint/.node_modules_global"
    
    ; node bin location = /usr/bin/nodejs
    ; cwd = /home/sitepoint
    ; HOME = /home/sitepoint
    ; "npm config ls -l" to show all defaults.
    

    获取当前全局下地址

    $ npm config get prefix
    /usr
    

    想要更改这个prefix,以至于以后安装到我们自定义的目录下,所以创建了新的文件夹

    $ cd ~ && mkdir .node_modules_global
    $ npm config set prefix=$HOME/.node_modules_global
    

    上面代码已经更改了地址了,还需要在创建一个.npmrc文件

    $ npm config get prefix
    /home/sitepoint/.node_modules_global
    $ cat .npmrc
    prefix=/home/sitepoint/.node_modules_global
    

    因为我们更改了地址了,所以需要在更改后的地址下重新安装npm。

    $ npm install npm --global
    └─┬ npm@5.0.2
      ├── abbrev@1.1.0
      ├── ansi-regex@2.1.1
    ....
    ├── wrappy@1.0.2
    └── write-file-atomic@2.1.0
    

    最终,需要添加.node_modules_global/bin到$PATH环境变量下,以便在命令行下可以使用全局包,然后添加下面语句到.profile、.bash_profile或.bashrc并重启终端(此操作针对mac和Linux系统)。

    export PATH="$HOME/.node_modules_global/bin:$PATH"
    

    现在能发现路径.node_modules_global/bin,而且npm已经能使用

    $ which npm
    /home/sitepoint/.node_modules_global/bin/npm
    $ npm --version
    5.0.2
    

    全局模式下安装包

    现在在全局路径下只有npm一个包,所以体验一下安装包的过程,下面我们安装压缩js的包UglifyJS,使用--global标签,也可以使用-g。

    $ npm install uglify-js --global
    /home/sitepoint/.node_modules_global/bin/uglifyjs -> /home/sitepoint/.node_modules_global/lib/node_modules/uglify-js/bin/uglifyjs
    + uglify-js@3.0.15
    added 4 packages in 5.836s
    

    从结果可以看出,包已经安装完成

    罗列全局路径下的包

    使用npm list可以查看全局路径下的所有包

    $ npm list --global
    home/sitepoint/.node_modules_global/lib
    ├─┬ npm@5.0.2
    │ ├── abbrev@1.1.0
    │ ├── ansi-regex@2.1.1
    │ ├── ansicolors@0.3.2
    │ ├── ansistyles@0.1.3
    ....................
    └─┬ uglify-js@3.0.15
      ├─┬ commander@2.9.0
      │ └── graceful-readlink@1.0.1
      └── source-map@0.5.6
    

    也可以使用--depth=0来缩短返回的结果

    $ npm list -g --depth=0
    /home/sitepoint/.node_modules_global/lib
    ├── npm@5.0.2
    └── uglify-js@3.0.15
    

    全局路径下的包在命令行中可以使用,

    $ uglifyjs example.js -o example.min.js
    

    在本地模式下安装包

    在本地模式下安装,需要使用package.json文件,所以先创建:

    $ npm init
    package name: (project)
    version: (1.0.0)
    description: Demo of package.json
    entry point: (index.js)
    test command:
    git repository:
    keywords:
    author:
    license: (ISC)
    

    一直敲击回车键,就可以创建package.json文件在根目录下。

    {
      "name": "project",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    

    main表示程序的入口文件,scripts指定运行脚本命令缩写。如果想了解更多,可以去查阅package.json相关文档。

    现在试着安装Underscore包

    $ npm install underscore
    npm notice created a lockfile as package-lock.json. You should commit this file.
    npm WARN project@1.0.0 No description
    npm WARN project@1.0.0 No repository field.
    
    + underscore@1.8.3
    added 1 package in 0.344s
    

    如果看一下package.json,会发现dependencies已经被添加

    {
      ...
      "dependencies": {
        "underscore": "^1.8.3"
      }
    }
    

    管理package.json的dependencies

    Underscore v1.8.3已结安装到项目中,版本号前的插入符号(^)代表的是要安装不低于此版本的包,但是不能改变大版本号,上例可以安装2.0.0版本以下,但不能安装超过2.0.0版本(package.json还有其他符号,可以参考文档)。

    需要注意在最新的npm中默认会把Underscore存为dependencies域,这样作为程序运行必备的包。同时也可以指定--save-dev,填入到devDependency。devDependency是用于开发时所需要的包。

    也可以使用添加private:true到package.json,防止发布意外私有库,当运行npm install防止错误发生。

    使用package.json为了让项目的依赖库可以移植到别处。例如,在你主机上运行别人代码,你需要在项目根目录运行npm i,npm会解析并安装所需要的库,以便能运行app。

    删除本地包

    npm是包管理器,所以当然也能删除包。

    $ npm uninstall underscore
    removed 2 packages in 0.107s
    $ npm list
    project@1.0.0 /home/sitepoint/project
    └── (empty)
    

    安装特定版本的包

    现在我们可以安装我们所想要版本的包,使用@加上版本号即可。

    $ npm install underscore@1.8.2
    + underscore@1.8.2
    added 1 package in 1.574s
    
    $ npm list
    project@1.0.0 /home/sitepoint/project
    └── underscore@1.8.2
    

    更新包

    首先先检查包是否有更新

    $ npm outdated
    Package     Current  Wanted  Latest  Location
    underscore    1.8.2   1.8.3   1.8.3  project
    

    Current代表你已经安装的包版本,Latest为最新的版本,Wanted为在不破坏现有代码情况下,可以更新到的版本号。

    npm v5中新增了package-lock.json,其目的是确保在所有主机上安装同样的依赖库。无论是是在node_modules目录或package.json文件修改依赖树,都会自动记录下来。

    可以删除node_modules目录,然后再运行npm i,依然会安装Underscore v1.8.2,早期的npm会安装到最新版,但是最新的v5版本npm却不会。这样就不用在像早期使用npm-shrinkewrap.json来解决。

    但是如果有了package-lock.json,再运行npm shrinkwrap,会把pakcage-lock.json重命名为npm-shrinkewrap.json,可以看出 把npm-shrinkwrap.json 作为了默认创建,这是因为为了向下兼容之前使用npm-shrinkwrap.json的项目。

    现在让我们更新包:

    $ npm update underscore
    + underscore@1.8.3
    updated 1 package in 0.236s
    
    $ npm list
    project@1.0.0 /home/sitepoint/project
    └── underscore@1.8.3
    

    也可以直接使用npm update更新多个已经过期的包

    寻找包

    寻找包使用npm search命令

    $ npm search mkdir
    NAME      | DESCRIPTION          | AUTHOR          | DATE       | VERSION
    mkdir     | Directory crea…      | =joehewitt      | 2012-04-17 | 0.0.2
    fs-extra  | fs-extra conta…      | =jprichardson…  | 2017-05-04 | 3.0.1
    mkdirp    | Recursively mkdir,…  | =substack       | 2015-05-14 | 0.5.1
    ...
    

    重新安装项目依赖

    首先安装一个新的包

    $ npm install request
    + request@2.81.0
    added 54 packages in 15.92s
    

    检查package.json文件

    "dependencies": {
      "mkdirp": "^0.5.1",
      "request": "^2.81.0",
      "underscore": "^1.8.2"
    },
    

    注意依赖树自动更新,之前的npm执行npm install request --save才会存储到依赖中,如果不想存入到依赖中,则使用--no-save

    删除node_modules目录,模拟clone项目在别的主机上,然后执行npm install

    $ rm -R node-modules
    $ npm list
    project@1.0.0 /home/sitepoint/project
    ├── UNMET DEPENDENCY mkdirp@^0.5.1
    ├── UNMET DEPENDENCY request@^2.81.0
    └── UNMET DEPENDENCY underscore@^1.8.2
    
    npm ERR! missing: mkdirp@^0.5.1, required by project@1.0.0
    npm ERR! missing: request@^2.81.0, required by project@1.0.0
    npm ERR! missing: underscore@^1.8.2, required by project@1.0.0
    
    $ npm install
    added 57 packages in 1.595s
    

    管理缓存

    npm安装包时会保存副本,这样下次再安装时,就不需要连网,缓存存储在默认用户目录下的.npm文件夹(windows系统会存储在npm-cache文件夹)

    $ ls ~/.npm
    anonymous-cli-metrics.json  _cacache  _locks  npm  registry.npmjs.org
    

    可以使用下面命令,偶尔清楚一下缓存:

    $ npm cache clean
    

    别名

    • npm i – 安装包
    • npm i -g – 安装包到全局下
    • npm un – 删除本地下包
    • npm up – 更新包
    • npm t – 运行测试
    • npm ls – 罗列已经安装包
    • npm ll or npm la – 罗列包时显示额外信息

    也可以一次安装多个包

    $ npm i express momemt lodash mongoose body-parser webpack
    

    如果想知道其余npm命令,可以运行npm help

    版本管理器

    版本管理器可以在一台主机上控制多个版本的node,比如n,nvm

    参考链接

    原文链接
    npm 模块安装机制简介
    npm5 新版功能特性解析及与 yarn 评测对比
    package.json文件
    package.json for NPM 文件详解

    相关文章

      网友评论

        本文标题:NPM(node package manager)使用、语法介绍

        本文链接:https://www.haomeiwen.com/subject/ctepjqtx.html