NPM你真的会吗?(一)

栏目: Node.js · 发布时间: 4年前

内容简介:npm是什么东东?npm其实是Node.js的包管理工具(package manager)。 为啥我们需要一个包管理工具呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,script 引入,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。 更重要的是,如果我们要使用模块A,而模块A又依

npm是什么东东?npm其实是Node.js的包管理工具(package manager)。 为啥我们需要一个包管理 工具 呢?因为我们在Node.js上开发时,会用到很多别人写的JavaScript代码。如果我们要使用别人写的某个包,每次都根据名称搜索一下官方网站,下载代码,解压,script 引入,非常繁琐。于是一个集中管理的工具应运而生:大家都把自己开发的模块打包后放到npm官网上,如果要使用,直接通过npm安装就可以直接用,不用管代码存在哪,应该从哪下载。 更重要的是,如果我们要使用模块A,而模块A又依赖于模块B,模块B又依赖于模块X和模块Y,npm可以根据依赖关系,把所有依赖的包都下载下来并管理起来。否则,靠我们自己手动管理,肯定既麻烦又容易出错。

npm的历史

在没有npm的年代,你要去获取一个模块,或者一个框架你的方式是什么?

  • 获取->JQ
  • 获取->Boottrap
  • 获取->Underscore
NPM你真的会吗?(一)

我们的GitHub

NPM你真的会吗?(一)

当然当时也是一个jQuery可以走天下的时代

我们 程序员 当然不能接受这种古老而且低效率的事情,我们需要更加高效更加合理的代码管理方式。

想想其他语言

语言 包管理工具
Java maven
Python distribute、setuptools、distutils、easy_install、pip
PHP Composer

前端居然没有!不能容忍!在这个时候有个人站了出来

Isaac Z. Schlueter GitHub 下面简称(Issac)

大致的实现思路

  • 找一个云服务把所有的代码都管理起来
  • 然后通知 jQuery、Bootstrap、等等这些框架的坐着作者使用 npm publish 把代码提交到云服务上,
  • 社区里的其他人如果想使用这些代码,就可以通过npm install 来下载这些代码了。
  • 下载完的代码出现在 node_modules 目录里,就可以通过require引入进行使用了。

后续发展

Isaaz 通知 jQuery 作者 John Resig,他会答应吗?不一定这还是个未知数,但是还是要去做。 只有前端开发工程师人人都知道有这个东西了才会认可它对不对。 那npm是怎么迅速在前端社区火爆起来的呢? npm 的发展是跟 Node.js 的发展相辅相成的。 Node.js 是由一个在德国工作的美国程序员 Ryan Dahl github地址 写的。他写了 Node.js,但是 Node.js 当时缺少一个包管理器,于是他和 Isaaz 一拍即合、,最终 Node.js内置了npm。 后来的事情大家都知道,Node.js 火了。

NPM你真的会吗?(一)

package.json

当我们在一个空文件 npm init 初始化的时候这个文件就诞生了,

NPM你真的会吗?(一)

我这里找了express 的 package.json

{
  "name": "express", // 包名
  "description": "Fast, unopinionated, minimalist web framework", // 包的描述
  "version": "4.13.3", // 包的版本号
  "author": { // 包的作者姓名
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "contributors": [ // 包的其他贡献者姓名
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    }
    // ...
  ],
  "license": "MIT", // 你应该为你的模块制定一个协议,让用户知道他们有何权限来使用你的模块,以及使用该模块有哪些限制。
  "repository": { // 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。
    "type": "git",
    "url": "git+https://github.com/strongloop/express.git"
  },
  "homepage": "http://expressjs.com/", // 包的官网 url
  "keywords": [ // 关键字
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": { // 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
    "accepts": "~1.2.12",
    // ...
  },
  "devDependencies": { // 开发环境的依赖包
    "after": "0.8.1",
    // ...
  },
  "engines": { // node版本范围
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": { // 项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/"
  },
  "gitHead": "ef7ad681b245fba023843ce94f6bcb8e275bbb8e",
  "bugs": {
    "url": "https://github.com/strongloop/express/issues"
  },
  "_id": "express@4.13.3",
  "_shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3",
  "_from": "express@*",
  "_npmVersion": "1.4.28",
  "_npmUser": {
    "name": "dougwilson",
    "email": "doug@somethingdoug.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    }
    // ...
  ],
  "dist": {
    "shasum": "ddb2f1fb4502bf33598d2b032b037960ca6c80a3",
    "tarball": "http://registry.npmjs.org/express/-/express-4.13.3.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/express/-/express-4.13.3.tgz",
  "readme": "ERROR: No README data found!"
}
复制代码

那么你下次如果有这个package.json 你就可以直接下载安装这些依赖包。包文件就会出现在node_modules里面。

经常使用的命令

全局安装与本地安装

很多朋友一开始并不知道 npm install -g 和不带-g的区别,npm 的包安装分为本地安装(local)、全局安装(global)两种

npm install express          # 本地安装
npm install express -g       # 全局安装
复制代码

本地安装

1、将安装包放在./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录

2、可以通过 require() 来引入本地安装的包。

全局安装

1、将安装包放在 /usr/local 下或者你 node 的安装目录

2、可以直接在命令行里使用

卸载模块

既然可以安装那么也会有卸载模块的方式,

npm uninstall express
复制代码

卸载完以后查看一下该模块是否存在

npm ls
复制代码

更新模块

npm update express

复制代码

更多知识我们会在NPM你真的会吗?(二)中来讲解大家敬请期待。


以上所述就是小编给大家介绍的《NPM你真的会吗?(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web缓存

Web缓存

Duane Wessels / 清华大学 / 2002-11 / 99.00元

When I first sta一起来看看 《Web缓存》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具