热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NPM你真的会吗?(一)

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

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你真的会吗?(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 本文分享了作者在使用LaTeX过程中的几点心得,涵盖了从文档编辑、代码高亮、图形绘制到3D模型展示等多个方面的内容。适合希望深入了解LaTeX高级功能的用户。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文详细介绍如何安装和配置DedeCMS的移动端站点,包括新版本安装、老版本升级、模板适配以及必要的代码修改,以确保移动站点的正常运行。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文介绍了如何利用jQuery实现对网页上多个div元素的显示与隐藏控制,包括基本的toggle方法及更复杂的显示隐藏逻辑。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 在开发一个网页音乐播放器时遇到问题,需要从不同源读取MP3文件的ID3标签信息,包括流派、歌手和歌曲名称等。尝试使用PHP未果后转而考虑使用JavaScript进行跨域读取,但不清楚具体配置方法,寻求技术指导。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文详细介绍了笔记本电脑上多种实用的快捷键,包括屏幕调整、图形设置、分辨率更改、驱动更新、导航操作、音量控制及屏幕锁定等,旨在帮助用户更高效地使用笔记本电脑。 ... [详细]
author-avatar
8prye孙瑞D
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有