什么是NPM, 为什么要用NPM来管理包

2017, Jan 07    

NPM 全称 node package manager, 是 nodejs 的包管理工具。npm的出现,使得我们前端开发者可以更好的引用别人的代码,还可以很方便的分享自己的代码。并且可以很轻松的更新自己分享出去的代码。如果你学过java,那一定对maven并不陌生,npm和maven功能上大体相同,可以毫不夸张的说,npm就是nodejs中的maven。

npm init(创建一个简单的npm项目)

npm最基本的一个命令,就是 npm init ,输入这个命令后,npm会引导你输入一些内容

name > 模块名称
version > 模块版本
description > 模块描述
enter point > 入口文件
test command > 测试命令
git repository > git仓库地址
keywords > 关键词
author > 作者
license > 开源声明

输入完基本信息后,npm会生成一个文件 package.json,这个文件就包含了刚刚我们通过npm init 引导输入的一些信息。这个就如同maven里面的 pom.xml 文件,主要是包含了这个模块的一些基本信息和依赖。

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

这就是一个最简单的npm项目了。

实例说明

markdown-it-editor 的 package.json

这是我写的一个Vue组件markdown-it-editor 这个组件以及发布到npmjs上面去,大家可以在用npm install markdown-it-editor 下载这个组件,这个组件里面的package.json 比我们上面生成的那个文件多了很多内容。这里摘取一些给大家说明一下。

scripts 脚本

故名思议,就是一些脚本代码,可以通过 npm run script-key 来调用,例如在这个package.json的文件夹下使用 npm run dev 就相当于运行了 node build/dev-server.js 这一段代码。使用scripts的目的就是为了把一些要执行的代码合并到一起,使用npm run 来快速的执行,方便省事。

// 脚本
"scripts": {
    "dev": "node build/dev-server.js",
    "build": "node build/build.js",
    "docs": "node build/docs.js",
    "build-docs": "npm run docs & git checkout gh-pages & xcopy /sy dist\\* . & git add . & git commit -m 'auto-pages' & git push & git checkout master",
    "build-publish": "rmdir /S /Q lib & npm run build &git add . & git commit -m auto-build & npm version patch & npm publish & git push",
    "lint": "eslint --ext .js,.vue src"
}

dependencies 依赖

这个可以说是我们npm 核心一项内容,依赖管理,这个对象里面的内容就是我们这个项目所依赖的js模块包。下面这段代码表示我们依赖了 markdown-it这个包,版本是 ^8.1.0,代表最小依赖版本是8.1.0,如果这个包有更新,那么当我们使用npm install 命令的时候,npm会帮我们下载最新的包。当别人引用我们这个包的时候,包内的依赖包也会被下载下来。

"dependencies": {
    "markdown-it": "^8.1.0"
  },

devDependencies 开发依赖

在我们开发的时候会用到的一些包,只是在开发环境中需要用到,但是在别人引用我们包的时候,不会用到这些内容,放在devDependencies的包,在别人引用的时候不会被npm下载。

  "devDependencies": {
    "autoprefixer": "^6.4.0",0",
    "babel-preset-es2015": "^6.0.0",
    "babel-preset-stage-2": "^6.0.0",
    "babel-register": "^6.0.0",
     // ...
    "webpack": "^1.13.2",
    "webpack-dev-middleware": "^1.8.3",
    "webpack-hot-middleware": "^2.12.2",
    "webpack-merge": "^0.14.1",
    "highlightjs": "^9.8.0"
  }

当你有了一个完整的package.json文件的时候,就可以让人一眼看出来,这个模块的基本信息,和这个模块所需要依赖的包。 我们可以通过npm install 就可以很方便的下载好这个模块需要的包。

如何上传 Npm 模块包?

创建用户

首先我们需要在 npmjs 注册一个用户。创建后,在我们package.json 的目录下使用npm login命令登录刚刚注册的用户

发布包

使用 npm publish 命令发布包,目录内所有的文件都会被上传,我们可以将不想上传的内容 添加到 .gitignore 或者 .npmignore文件中,包名(package.json里面的name)不能和网上现有的包名重复, 我们可以通过 https://npmjs.com/package/ 来查看我们上传的包。

更新包

首先第一步就是需要更新包的版本号,可以手动将package.json里面的version更改至更高的数字,或者使用 npm version patch更多关于version的说明)来更新版本号,这个命令也会更改package.json文件,如果你有git仓库的话,这个命令还会添加一个带有新版本号的TAG。 更新版本号过后, 使用npm publish就可以新版本发布上去了。


npm的出现,不仅仅让我们使用他人代码更加的方便快捷,同时也更方便我们分享自己的作品。我们所有人分享的内容都可以在 npmjs 的官网上搜索到,这让我们前端开发更加的方便快捷。