亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

NPM你真的會(huì)嗎?(一)

Little_XM / 2498人閱讀

摘要:是生命周期中的事件,是要執(zhí)行的命令。全局安裝將安裝包放在下或者你的安裝目錄可以直接在命令行里使用卸載模塊既然可以安裝那么也會(huì)有卸載模塊的方式,卸載完以后查看一下該模塊是否存在更新模塊更多知識(shí)我們會(huì)在你真的會(huì)嗎二中來講解大家敬請(qǐng)期待。

什么是NPM

npm是什么東東?npm其實(shí)是Node.js的包管理工具(package manager)。
為啥我們需要一個(gè)包管理工具呢?因?yàn)槲覀冊贜ode.js上開發(fā)時(shí),會(huì)用到很多別人寫的JavaScript代碼。如果我們要使用別人寫的某個(gè)包,每次都根據(jù)名稱搜索一下官方網(wǎng)站,下載代碼,解壓,script 引入,非常繁瑣。于是一個(gè)集中管理的工具應(yīng)運(yùn)而生:大家都把自己開發(fā)的模塊打包后放到npm官網(wǎng)上,如果要使用,直接通過npm安裝就可以直接用,不用管代碼存在哪,應(yīng)該從哪下載。
更重要的是,如果我們要使用模塊A,而模塊A又依賴于模塊B,模塊B又依賴于模塊X和模塊Y,npm可以根據(jù)依賴關(guān)系,把所有依賴的包都下載下來并管理起來。否則,靠我們自己手動(dòng)管理,肯定既麻煩又容易出錯(cuò)。

npm的歷史

在沒有npm的年代,你要去獲取一個(gè)模塊,或者一個(gè)框架你的方式是什么?

獲取->JQ

獲取->Boottrap

獲取->Underscore


我們的GitHub

當(dāng)然當(dāng)時(shí)也是一個(gè)jQuery可以走天下的時(shí)代

我們程序員當(dāng)然不能接受這種古老而且低效率的事情,我們需要更加高效更加合理的代碼管理方式。
想想其他語言

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

前端居然沒有!不能容忍!在這個(gè)時(shí)候有個(gè)人站了出來
Isaac Z. Schlueter GitHub 下面簡稱(Issac)

大致的實(shí)現(xiàn)思路

找一個(gè)云服務(wù)把所有的代碼都管理起來

然后通知 jQuery、Bootstrap、等等這些框架的坐著作者使用 npm publish 把代碼提交到云服務(wù)上,

社區(qū)里的其他人如果想使用這些代碼,就可以通過npm install 來下載這些代碼了。

下載完的代碼出現(xiàn)在 node_modules 目錄里,就可以通過require引入進(jìn)行使用了。

后續(xù)發(fā)展

Isaaz 通知 jQuery 作者 John Resig,他會(huì)答應(yīng)嗎?不一定這還是個(gè)未知數(shù),但是還是要去做。
只有前端開發(fā)工程師人人都知道有這個(gè)東西了才會(huì)認(rèn)可它對(duì)不對(duì)。
那npm是怎么迅速在前端社區(qū)火爆起來的呢?
npm 的發(fā)展是跟 Node.js 的發(fā)展相輔相成的。
Node.js 是由一個(gè)在德國工作的美國程序員 Ryan Dahl github地址 寫的。他寫了 Node.js,但是 Node.js 當(dāng)時(shí)缺少一個(gè)包管理器,于是他和 Isaaz 一拍即合、,最終 Node.js內(nèi)置了npm。
后來的事情大家都知道,Node.js 火了。

package.json

當(dāng)我們在一個(gè)空文件 npm init 初始化的時(shí)候這個(gè)文件就誕生了,

我這里找了express 的 package.json

{
  "name": "express", // 包名
  "description": "Fast, unopinionated, minimalist web framework", // 包的描述
  "version": "4.13.3", // 包的版本號(hào)
  "author": { // 包的作者姓名
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "contributors": [ // 包的其他貢獻(xiàn)者姓名
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    }
    // ...
  ],
  "license": "MIT", // 你應(yīng)該為你的模塊制定一個(gè)協(xié)議,讓用戶知道他們有何權(quán)限來使用你的模塊,以及使用該模塊有哪些限制。
  "repository": { // 包代碼存放的地方的類型,可以是 git 或 svn,git 可在 Github 上。
    "type": "git",
    "url": "git+https://github.com/strongloop/express.git"
  },
  "homepage": "http://expressjs.com/", // 包的官網(wǎng) url
  "keywords": [ // 關(guān)鍵字
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": { // 依賴包列表。如果依賴包沒有安裝,npm 會(huì)自動(dòng)將依賴包安裝在 node_module 目錄下
    "accepts": "~1.2.12",
    // ...
  },
  "devDependencies": { // 開發(fā)環(huán)境的依賴包
    "after": "0.8.1",
    // ...
  },
  "engines": { // node版本范圍
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": { // 項(xiàng)目的生命周期個(gè)各個(gè)環(huán)節(jié)需要執(zhí)行的命令。key是生命周期中的事件,value是要執(zhí)行的命令。
    "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!"
}

那么你下次如果有這個(gè)package.json 你就可以直接下載安裝這些依賴包。包文件就會(huì)出現(xiàn)在node_modules里面。

經(jīng)常使用的命令

全局安裝與本地安裝
很多朋友一開始并不知道 npm install -g 和不帶-g的區(qū)別,npm 的包安裝分為本地安裝(local)、全局安裝(global)兩種

npm install express          # 本地安裝
npm install express -g       # 全局安裝

本地安裝
1、將安裝包放在./node_modules 下(運(yùn)行 npm 命令時(shí)所在的目錄),如果沒有 node_modules 目錄,會(huì)在當(dāng)前執(zhí)行 npm 命令的目錄下生成 node_modules 目錄
2、可以通過 require() 來引入本地安裝的包。
全局安裝
1、將安裝包放在 /usr/local 下或者你 node 的安裝目錄
2、可以直接在命令行里使用

卸載模塊
既然可以安裝那么也會(huì)有卸載模塊的方式,

npm uninstall express

卸載完以后查看一下該模塊是否存在

npm ls

更新模塊

npm update express

更多知識(shí)我們會(huì)在NPM你真的會(huì)嗎?(二)中來講解大家敬請(qǐng)期待。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104755.html

相關(guān)文章

  • Java基礎(chǔ)語法知識(shí)真的會(huì)嗎

    摘要:而所有的數(shù)據(jù)運(yùn)算都是采用補(bǔ)碼進(jìn)行的。補(bǔ)碼解決負(fù)數(shù)加法運(yùn)算正負(fù)零問題,彌補(bǔ)了反碼的不足。通過使用訪問修飾符可以使實(shí)例變量對(duì)子類可見暫時(shí)在學(xué)習(xí)基礎(chǔ)語法知識(shí)的時(shí)候可以暫時(shí)忽略實(shí)例變量這部分內(nèi)容,這部分內(nèi)容主要被使用在面向?qū)ο蟮牟糠?,但是極其重要。 showImg(https://segmentfault.com/img/remote/1460000019264541?w=600&h=242)...

    DirtyMind 評(píng)論0 收藏0
  • Python這些問題會(huì)嗎?

    摘要:因此,對(duì)于里包含的對(duì)象如果都是可以比較的,也就是說實(shí)現(xiàn)了函數(shù),那么對(duì)調(diào)用函數(shù)是沒問題的。 Python這些問題你會(huì)嗎? final作用域的代碼一定會(huì)被執(zhí)行嗎? 正常的情況下,finally作用域的代碼一定會(huì)被執(zhí)行的,不管是否發(fā)生異常。哪怕是調(diào)用了sys.exit函數(shù),finally也是會(huì)被執(zhí)行的,那怎么樣才能讓finally代碼不執(zhí)行了。 import time choice = Tr...

    freecode 評(píng)論0 收藏0
  • 26自學(xué)轉(zhuǎn)行前端(寫給和1年前樣迷茫的我的

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏2637
  • 26自學(xué)轉(zhuǎn)行前端(寫給和1年前樣迷茫的我的

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏2577
  • 26自學(xué)轉(zhuǎn)行前端(寫給和1年前樣迷茫的我的

    摘要:轉(zhuǎn)行前端有哪些疑慮在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面這里前后端指的是開發(fā)的前后端。 轉(zhuǎn)行前端有哪些疑慮? 在人生的抉擇處,尋求一些別人的經(jīng)驗(yàn)和總結(jié),無可厚非,但是決定了就一定要堅(jiān)定的走下去,謹(jǐn)慎是為了更好的堅(jiān)持,而不是放棄的理由。寫在前面:這里前后端指的是web開發(fā)的前后端。1、前端崗位需...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<