日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Node.js npm 详解

發(fā)布時(shí)間:2024/7/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Node.js npm 详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、npm簡(jiǎn)介

安裝npm請(qǐng)閱讀我之前的文章Hello Node中npm安裝那一部分,不過(guò)只介紹了linux平臺(tái),如果是其它平臺(tái),有前輩寫(xiě)了更加詳細(xì)的介紹。

npm的全稱:Node Package Manager.

####(1)通俗的理解

其實(shí)從字面意思就可以理解這個(gè)產(chǎn)品有什么作用翻譯為“Node包管理器”。對(duì),就是Node的包的一個(gè)管理工具,目前我嘗試的有

  • 下載并安裝包(npm install [pkg])
  • 升級(jí)安裝包(npm update [pkg])
  • 卸載安裝包(npm uninstall/rm [pkg]),可以指定卸載包的版本號(hào) ...
  • 其實(shí)這些命令很簡(jiǎn)單,常用的必須記住,不常用的查詢即可,這才是比較好的學(xué)習(xí)知識(shí)方式。

    在終端輸入:

    //查看npm擁有的全部命令 $ npm --help $ npm help //查看某一個(gè)npm命令的詳細(xì)用法 $ npm <command> --help $ npm help <command>

    ####(2)專(zhuān)業(yè)的解釋

    npm(Node Package Manager)是Node.js下的主流套件管理程式。它在Node.js v0.6.x版本之后,內(nèi)建于Node系統(tǒng)。通過(guò)npm可以協(xié)助開(kāi)發(fā)者安裝、卸載、刪除、更新Node.js套件,并且可以通過(guò)npm發(fā)布自己的插件。

    二、類(lèi)似的產(chǎn)品

    其實(shí)學(xué)習(xí)一個(gè)產(chǎn)品,可以聯(lián)系其它產(chǎn)品,能夠更好的理解現(xiàn)在手頭的產(chǎn)品。第一次學(xué)習(xí)npm我的第一反應(yīng)就是,很像linux/mac平臺(tái)的很多軟件,依賴管理的方式可以參考maven...當(dāng)然相似性可以隨便聯(lián)想。

    接下來(lái),舉幾個(gè)例子吧,當(dāng)然詳細(xì)了解可以查baidu && google。

  • gem
  • PyPL
  • pear
  • macPort
  • Homebrew
  • rem
  • apt-get
  • yum ...
  • 是不是很多都很熟悉?這樣對(duì)于npm的認(rèn)識(shí)就不用局限于概念啦。

    三、npm基礎(chǔ)功能

    (1)npmrc文件介紹

    首先介紹一下npmrc文件,這個(gè)文件是npm包管理器的配置文件。

    與npmrc相關(guān)的三個(gè)文件:

  • 用戶配置文件:~/.npmrc
  • 全局配置文件:$PREFIX/npmrc
  • npm內(nèi)部配置文件:安裝npm的目錄下
  • 下面仔細(xì)看一下npm config的配置。

    (2)npm獲取配置的6種方式(優(yōu)先級(jí)從高到低):

    1.命令行參數(shù)

    $ --proxy http://<server>:<port>

    2.環(huán)境變量

    以"npmconfig"為前綴的環(huán)境變量將會(huì)被認(rèn)為是npm的配置屬性。 像Maven鏡像的概念,方便通信吧。

    $ npm_config_proxy=http://<server>:<port>

    3.用戶配置文件

    //查看文件路徑 $ npm config get userconfig//mac系統(tǒng)默認(rèn)路徑 $HOME/.npmrc

    4.全局配置文件

    //查看文件路徑 $ npm config get globalconfig//mac系統(tǒng)默認(rèn)路徑 /usr/local/etc/npmrc

    3,4中輸入終端的效果如圖:

    5.內(nèi)置配置文件

    安裝npm的目錄下的npmrc文件。

    6.默認(rèn)配置

    如果前5條均未設(shè)置,npm會(huì)使用默認(rèn)配置參數(shù)。

    (4)npm install

    “安裝指定包”:這個(gè)命令不難,但是也有需要注意的地方,就是安裝的模式有兩種,在后面會(huì)單獨(dú)講解。

    如果不知道包的具體名稱,可以在http://search.npmjs.org上進(jìn)行搜索。

    (5)npm uninstall

    “卸載指定包”:在help的時(shí)候,會(huì)給你推薦npm rm?這個(gè)命令,uninstall會(huì)卸載掉包的依賴,rm。

    ####(6)npm ls

    查看安裝的包清單,其實(shí)和linux的ls命令很像,可以跟很多參數(shù),詳情可以使用

    $ npm help ls

    ####(7)npm search

    搜索包的詳細(xì)信息,比如我們搜索express試試。第一次搜索,會(huì)提示建立索引,需要耐心等待片刻,大家測(cè)試的時(shí)候不要就關(guān)掉啦終端。

    npm WARN Building the local index for the first time, please be patient

    其實(shí)看上去復(fù)雜,只是東西有點(diǎn)大,不過(guò)主要包含以下6個(gè)部分:

  • 名稱
  • 描述
  • 作者
  • 發(fā)布時(shí)間
  • 發(fā)布版本號(hào)
  • 關(guān)鍵字
  • ####(8)npm update

    更新安裝的包

    更多API可以查看官網(wǎng):https://npmjs.org/doc/

    四、版本號(hào)的知識(shí)。

    在node.js中的package.json配置文件中,我們需要配置版本號(hào),比如0.1.2

    第一位數(shù)字:主版本號(hào)

    第二位數(shù)字:子版本號(hào)

    第三位數(shù)字:補(bǔ)丁版本號(hào)

    找到一個(gè)不錯(cuò)的介紹軟件項(xiàng)目版本號(hào)的文章

    軟件項(xiàng)目版本號(hào)的命名規(guī)則及格式

    為什么要解釋這個(gè)呢?肯定是有用,因?yàn)閚pm安裝的時(shí)候是可以選擇版本號(hào)的,有點(diǎn)理解會(huì)比較好吧,至少我是這么認(rèn)為的。

    ?

    ?

    一、前言

    很久之前就想系統(tǒng)的學(xué)習(xí)nodejs技術(shù)了,但是由于很多事情,忙不太過(guò)來(lái),今天晚上下定決心要入門(mén)這門(mén)技術(shù),所以一口氣看完了《Node.js開(kāi)發(fā)指南》和《Node.js中文文檔》,總算是真正入門(mén)了,接下來(lái)就總結(jié)一部分,剩下的只有明天再總結(jié)了。

    二、Node.js簡(jiǎn)介

    一句話簡(jiǎn)單說(shuō)明一下node.js是什么東西。

    Node.js 是一個(gè)讓 JavaScript 運(yùn)行在服務(wù)端的開(kāi)發(fā)平臺(tái)。

    三、Node.js的安裝

    學(xué)習(xí)了Node.js,覺(jué)得如果在window下學(xué)習(xí)這門(mén)技術(shù)的話還太成熟,第三方的支持不太好,所以只介紹linux或者mac上面的安裝。node.js在window上面的安裝直接下載安裝包,一直下一步就可以裝好,環(huán)境變量也會(huì)自動(dòng)配置好,npm(node package manage)在新版本也會(huì)相應(yīng)的裝上。

    對(duì)于mac環(huán)境安裝也比較簡(jiǎn)單,介紹兩種安裝方式。

    1.homebrew(注意一直使用admin權(quán)限吧,大多都是權(quán)限文件夾,可以在終端開(kāi)始使用sudo -s命令來(lái)一直使用admin權(quán)限)

    $ sudo brew install node

    這樣下載完了就算安裝上了,我們可以來(lái)檢測(cè)一下你的安裝(軟件配置必須要的步驟)。

    # 查看node版本號(hào) $ node -v # 查看npm版本號(hào)和清單 $ npm -v && npm list

    如果npm沒(méi)有安裝上,那么可以使用以下命令安裝。

    $ sudo curl http://npmjs.org/install.sh | sh

    2.使用源碼編譯的方式(其實(shí)有方便的盡量就避免麻煩的,嘿嘿)

    下載地址:http://nodejs.org

    執(zhí)行典型的安裝命令即可(注意到/bin目錄,或者有configure文件的目錄)。

    $ ./configure && make && sudo make install

    四、Node.js的多版本管理器n

    下載地址:https://github.com/visionmedia/n

    如上執(zhí)行源碼安裝命令即可。

    當(dāng)然,如果你安裝了npm,就有更方便的方式,這也是很迷人的地方。

    $ sudo npm install -g n

    接下來(lái)檢查一下安裝情況。

    $ n --version

    這樣就可以使用自由切換使用node的版本了。用如下命令安裝指定版本的node。

    $ n version

    下載后,會(huì)默認(rèn)下載到:/usr/local/n/versions/目錄

    如果你安裝后,再使用"$ n version"命令就是指定使用的默認(rèn)版本號(hào),也可以使用“$ n use version xxx.js”來(lái)暫時(shí)使用某個(gè)node版本執(zhí)行xxx.js文件。

    五、萬(wàn)事具備,只欠Hello Node.js

    每個(gè)語(yǔ)言入門(mén)都可以寫(xiě)一個(gè)hello xxx,示好。

    在node中,這個(gè)很簡(jiǎn)單,只需要進(jìn)入REPL模式,暫時(shí)不要管這個(gè)模式是什么,我們先使用。這個(gè)用截圖來(lái)直觀說(shuō)明一下。

    進(jìn)入REPL模式的命令:

    $ node

    接下來(lái)直接輸入:

    console.log("hello node.js!");

    就可以在終端打印出:

    >hello node.js! >undefined

    寫(xiě)過(guò)js的應(yīng)該對(duì)最后會(huì)輸出undefined并不吃驚,先可以不管。

    下面解釋一下REPL模式:

    其實(shí)這個(gè)模式不用解釋,經(jīng)過(guò)上面的例子應(yīng)該就有直觀的認(rèn)識(shí)啦,類(lèi)似mysql、python等的shell交互的方式,可以讓你輸入馬上就得到反饋,輸出結(jié)果到屏幕上面。在node中可以連續(xù)按兩次ctrl+c退出(但是python要使用exit()函數(shù),很不舒服)。

    上面是一種最簡(jiǎn)單的方式,還是介紹一種正規(guī)的方式吧,既然是js的運(yùn)行平臺(tái),我們就寫(xiě)一個(gè)js文件:hello.js,內(nèi)容很簡(jiǎn)單,如下:

    console.log("hello node.js!"); console.log("%d\n", 60);

    在終端執(zhí)行(注意要進(jìn)入hello.js所在目錄哦):

    $ node hello.js

    就可以在終端直接輸出結(jié)果了。

    為什么我加入了“console.log('%d\n', 60);”這一句呢?那是因?yàn)檫@可以測(cè)試出其實(shí)可以用c語(yǔ)言printf的方式來(lái)寫(xiě)console.log()。

    六、Node.js終于來(lái)到了瀏覽器

    前面的例子都是在控制臺(tái)里面的,沒(méi)什么意思,我們接下來(lái)寫(xiě)一個(gè)我們典型的B/S訪問(wèn)的方式。當(dāng)然這就離不開(kāi)HTTP了,查看了一下node的源碼,新版本默認(rèn)是http 1.1,支持http和https這兩種協(xié)議。

    我們先建一個(gè)http.js文件,里面的內(nèi)容對(duì)于后臺(tái)的開(kāi)發(fā)人員就很熟悉了。

    var http = require("http"); http.createServer(function(req, res) { res.writeHead(200, {"Content-Type": "text/html"}); res.write("<h1>Node.js</h1>"); res.end("<p>Hello Node.js</p>"); }).listen(8888); console.log("HTTP server is listening at port 8888.");

    以上代碼監(jiān)聽(tīng)的port:8888,這其實(shí)就是建立了一個(gè)request,我們?cè)跒g覽器地址欄中輸入:http://localhost:8888/?即可以訪問(wèn)我們打印的內(nèi)容。

    我們先在終端運(yùn)行后臺(tái)服務(wù):

    $ node http.js

    我們來(lái)分析一下這個(gè)簡(jiǎn)單的程序,其實(shí)從require的加載方式我們并不陌生,這是現(xiàn)在模塊加載在前端普遍使用的函數(shù)名,那么為什么我們的js代碼就能夠這樣來(lái)請(qǐng)求和訪問(wèn)呢?我們來(lái)簡(jiǎn)單的看看源碼的解析。

    1. 首先我們先看看源碼的http.js文件。

    var Server = exports.Server = server.Server; function createServer() { return new Server(requestListener) };

    在這個(gè)文件中,我們知道createServer()方法其實(shí)返回的就是Server類(lèi),這個(gè)類(lèi)是由server這個(gè)實(shí)例來(lái)的。

    2. 接下來(lái)我們?cè)僮粉櫼幌耞http_server.js文件。

    這個(gè)要問(wèn)怎么找到這些文件的,其實(shí)是憑直覺(jué)和猜測(cè),再加上模塊化的調(diào)試方法,可以找到http.js文件的加載模塊,就可以找到相應(yīng)的文件了。

    function requestListener() {}; function connectionListener(socket) {} Server.prototype.setTimeout = function(msecs, callback) {};

    再這個(gè)文件中,我們可以看出和Socket原理差不多,使用定時(shí)器來(lái)實(shí)現(xiàn)端口的監(jiān)聽(tīng),但是在源碼中可以找到主定時(shí)器,這個(gè)概念來(lái)源于游戲開(kāi)發(fā),在全局設(shè)置定時(shí)器,這樣大大提升了性能,不得不佩服作者的才能。

    3. 那么我們node底層是c/c++來(lái)實(shí)現(xiàn)的,我們可以追蹤一下node的啟動(dòng)。

    我們先找到c語(yǔ)言的main文件,后來(lái)發(fā)現(xiàn)好多node_開(kāi)頭的,大楷就是系統(tǒng)和行一點(diǎn)的文件了,在node_main.cc文件中發(fā)現(xiàn)了:node::Start(argc, argv);函數(shù),但是找不到具體實(shí)現(xiàn),那么就肯定是在依賴文件中,通過(guò)頭文件的聲明,找到了,其實(shí)實(shí)現(xiàn)位于node.cc文件。

    4. node.cc文件來(lái)看node啟動(dòng)流程。

    函數(shù)大致的執(zhí)行順序?yàn)?#xff1a;

    int Start(int argc, char** argv) V8::Initialize();CreateEnvironment() //創(chuàng)建當(dāng)前環(huán)境SetupProcessObject() //啟動(dòng)當(dāng)前環(huán)境的進(jìn)程Load() //加載當(dāng)前環(huán)境context() //引用上下文uv_run //開(kāi)始異步事件運(yùn)行RunAtExit //刪除異步事件鏈表

    上面可以看出其實(shí)就是通過(guò)一系列初始化,最后達(dá)到平臺(tái)的建立。

    5. module的加載實(shí)質(zhì)

    其實(shí)我們經(jīng)過(guò)上面的分析,我們大致知道的node的構(gòu)成,那么我們能夠在node.js(猜想:這個(gè)js文件是c和js溝通的橋梁)中,發(fā)現(xiàn)傳入了process對(duì)象。源碼結(jié)構(gòu)如下:

    (function(process) {}); //本地模塊的加載接口 NativeModule.require();

    我們來(lái)看一看根據(jù)process來(lái)綁定c語(yǔ)言的模塊。

    var HTTPParser = process.binding("http_parser").HTTPParser;

    是不是就很清晰啦,接下來(lái)我們看看模塊是怎么注冊(cè)的。

    //現(xiàn)在產(chǎn)生的插件會(huì)放置在node_module文件夾下應(yīng)該很清晰了 //定義了一個(gè)指針結(jié)構(gòu) node_module_struct* mod //注冊(cè)自己的模塊 mod->register_func(Handle<Object> target) //為注冊(cè)的模塊設(shè)置一個(gè)上下文 mod->register_context_func //最后加載到模塊緩存,這里也是實(shí)現(xiàn)延遲加載的本質(zhì) cache->Set(module, exports)

    在模塊注冊(cè)后,還需要做一些準(zhǔn)備工作才能夠真正的加載到我們的js文件。

    //node.cc文件中執(zhí)行綁定 static void Binding(const FunctionCallbackInfo<Value>& args); //node_javascript.cc文件中會(huì)定義你的js void DefineJavaScript(Handle<Object> target);

    6. 在module.js文件中,得到真正的js文件的加載,平臺(tái)調(diào)用。

    在這里作者的module數(shù)據(jù)結(jié)構(gòu)設(shè)置得比較簡(jiǎn)單,拋去其它得留下結(jié)構(gòu)如下:

    module: {id: "",parent: [],export: {},filename,children: [] }

    這樣我們這個(gè)http程序就能夠很好得解釋啦。其實(shí)知道了原理后面得知識(shí)就是看看api和寫(xiě)法了。太晚啦,睡覺(jué)覺(jué)啦 =_=...后續(xù)...

    ?

    ?

    ?

    ?

    安裝Node和npm前半部分的配置可以參考之前我的兩篇文章:

  • Hello Node
  • Node npm 詳解(1)
  • 四、本地模式和全局模式

    如果你了解環(huán)境變量里面的,用戶變量和系統(tǒng)變量。可以做一個(gè)類(lèi)比進(jìn)行理解。當(dāng)然,windows上面的環(huán)境變量概念比較好理解。

    1. 本地模式

    本地模式下安裝包的特點(diǎn)

    • 不會(huì)寫(xiě)入PATH變量(也就是環(huán)境變量,無(wú)法在全局引用該安裝包,不能在終端直接使用)
    • 能夠在不同的node_modules目錄,安裝不同版本的安裝包
    • 能夠通過(guò)require()來(lái)引入安裝包

    使用“npm install?[@]”安裝的包,默認(rèn)會(huì)安裝在當(dāng)前目錄的“node_modules”目錄下(如果沒(méi)有該目錄,在執(zhí)行命令的時(shí)候,會(huì)自動(dòng)幫你創(chuàng)建)。

    //專(zhuān)業(yè)的寫(xiě)法 ./node_modules

    (1)默認(rèn)采用本地模式安裝

    npm install <pkg>

    (2)信息寫(xiě)入package.json文件

    npm install <pkg> --save

    這個(gè)命令在安裝包的同時(shí),將信息寫(xiě)入package.json。

    @version表示指定安裝包的版本號(hào),是可選項(xiàng)目,默認(rèn)安裝最新版本。

    項(xiàng)目路徑中如果有package.json文件,使用npm install方法就可以根據(jù)dependencies配置安裝所有的依賴包。

    如果這樣配置,當(dāng)代碼提交到github時(shí),就不用提交node_modules這個(gè)文件夾。

    2. 全局模式

    全局模式安裝包的特點(diǎn)

    • 不需要重復(fù)安裝
    • 不能使用require()引入
    • 會(huì)寫(xiě)入PATH,并建立軟鏈接,使用命令行的方式使用
    • 不方便指定特定的版本運(yùn)行

    (1)采用全局模式安裝

    npm install -g <pkg>

    (3)在mac中全局的目錄

    //安裝包所在目錄 /usr/local/lib/node_modules/ //運(yùn)行命令的軟鏈接所在目錄 /usr/local/bin

    (4)查看安裝包路徑

    //查看當(dāng)前包的安裝路徑 npm root //查看全局的包的安裝路徑 npm root -g

    (5)設(shè)置全局模式安裝目錄

    //設(shè)置后,以全局模式將會(huì)安裝在此目錄中,不過(guò)需要手動(dòng)加入PATH,切記 npm config set prefix <global dir> //設(shè)置npm緩存文件的存放路徑 npm config set cache <cache dir>

    (6)查看默認(rèn)模式

    //默認(rèn)返回:false $ npm get global $ npm config get global

    (7)設(shè)置為默認(rèn)以全局模式安裝,就不用每次加"-g"參數(shù)啦。

    $ npm set global=true $ npm config set global=true

    npm set / npm config set與npm get / npm config get的區(qū)別和聯(lián)系單獨(dú)寫(xiě)吧。其實(shí)不難,只是需要實(shí)驗(yàn)才能得出結(jié)果,這里區(qū)別很細(xì)節(jié)。

    準(zhǔn)備把文章拆分成幾篇,寫(xiě)得詳細(xì)了一點(diǎn),這里寫(xiě)的話篇幅就太長(zhǎng)了。

    轉(zhuǎn)載于:https://www.cnblogs.com/libin-1/p/5907175.html

    總結(jié)

    以上是生活随笔為你收集整理的Node.js npm 详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 蜜桃做爰免费网站 | 精品一区二区免费视频 | 在线视频 中文字幕 | いいなり北条麻妃av101 | 熟女视频一区二区三区 | 午夜免费福利影院 | 国产一级片一区二区 | 国产精品21p| 顶弄h校园1v1| www一级片 | 天天摸日日 | 国产美女网站视频 | av手机在线观看 | 欧美丝袜一区二区三区 | 在线视频日韩 | 五月在线视频 | 亚洲黄色中文字幕 | 欧美国产成人精品一区二区三区 | 欧美一级片免费看 | 国产精品porn| 天天插插插 | 国产美女又黄又爽又色视频免费 | 成人免费毛片免费 | 成人欧美精品 | 91精品综合久久久久久 | 日韩www视频 | 亚洲激情自拍 | 国产一区二区三区四区五区在线 | 一级片免费网站 | 四虎在线免费 | 日韩精品欧美在线 | 国产色爽 | 精品国产va久久久久久久 | 91av官网| 亚洲最大av在线 | 日本成人黄色片 | 91刺激视频 | 丰满少妇在线观看bd | 欧美做爰猛烈床戏大尺度 | 久久精视频 | 另类综合视频 | 全黄一级片 | 少妇饥渴难耐 | 风流少妇一区二区三区91 | 久久网中文字幕 | www视频在线观看免费 | 在线一级视频 | 一二三四视频社区在线 | 黄色小视屏| 91午夜理伦私人影院 | 人人爱超碰 | 亚洲av无码专区在线 | 国产操女人 | av黄色免费在线观看 | 色婷婷亚洲一区二区三区 | 国产做爰xxxⅹ高潮视频12p | 无码毛片aaa在线 | 日本一区免费电影 | 成人精品在线观看 | 午夜99| 国产熟妇久久777777 | 久久有精品 | 男人插入女人阴道视频 | 黄色av网站在线 | 欧美日韩少妇 | 亚洲成成品网站 | 亚洲第一看片 | 开心激情五月网 | 国产一区二区三区四区hd | 亚洲欧美日韩在线不卡 | 国产在线日韩 | 免费香蕉视频 | 亚洲一二三区视频 | 永久免费视频网站 | 国产无人区码熟妇毛片多 | av在线收看 | 天天色天天操天天 | 亚洲v在线 | 日韩成人在线网站 | 在线综合色 | 久久久三级视频 | 国产91精品久久久久 | 超碰导航| 亚洲第一av | 色av吧| 少妇久久久久久久久久 | 亚洲第一综合 | 少妇被粗大猛进进出出s小说 | 国产午夜一区二区三区 | 四虎成人精品在永久免费 | 2020自拍偷拍 | 日韩欧美在线免费观看 | 天天干天天摸 | 神马久久久久 | 免费av一级片 | 精品人妻一区二区三区换脸明星 | 极品美女高潮出白浆 | 国产一区免费看 | 2018国产大陆天天弄 |