<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                CommonJS包規范是理論,NPM是其中的一種實踐。NPM之于Node,相當于gem之于Ruby,pear之于PHP。對于Node而言,NPM幫助完成了第三方模塊的發布、安裝和依賴等。借助NPM,Node與第三方模塊之間形成了很好的一個生態系統。 借助NPM,可以幫助用戶快速安裝和管理依賴包。除此之外,NPM還有一些巧妙的用法,下面我們詳細介紹一下: ## 1.查看幫助 在安裝Node之后,執行 npm -v 命令可以查看當前NPM版本: ~~~ $ npm -v 1.2.32 ~~~ 在不熟悉NPM的命令之前,可以直接執行NPM查看幫助引導說明: ~~~ $ npm Usage: npm <command> where <command> is one of: add-user, adduser, apihelp, bin, bugs, c, cache, complection, config, ddp, dedupe, deprecate, docs, edit, explore, faq, find, find-dupes, get, help, help-search, home, i, info, init, install, isntall, issues, la, link, list, ll, ln, login, ls, outdated, owner, pack, prefix, prune, publish, r, rb, rebuild, remove, restart, rm, root, run-script, s, se, search, set, show, shrinkwrap, star, stars, start, stop, submodule, tag, test, tst, un, uninstall, unlink, unpublish, unstar, up, update, version, view, whoami npm <cmd> -h quick help on <cmd> npm -l display full usage info npm faq commonly asked questions npm help <item> search for help on <item> Specify configs in the ini-formatted file: /Users/jacksontian/.nmprc or on the command line via: npm <command> --key value Config info can be viewed via: npm help config npm@1.2.32 /usr/local/lib/node_modules/npm ~~~ 可以看到,幫助中列出了所有的命令,其中npm help <command> 可以查看具體的命令說明。 ## 2.安裝依賴包 安裝依賴包是NPM最常見的用法,它的執行語句是 npm install express。執行該命令后,NPM會在當前目錄下創建node_modules目錄,然后在node_modules下創建express目錄,接著將包解壓到這個目錄下。 安裝好依賴包后,直接在代碼中調用require('express');即可引入該包。require()方法在做路徑分析的時候會通過模塊路徑查找到express所在的位置。模塊引入和包的安裝這兩個步驟是相輔相成的。 **全局模式安裝** 如果包中含有命令行工具,那么需要執行 npm install express -g 命令進行全局模式安裝。需要注意的是,全局模式并不是將一個模塊包安裝為一個全局包的意思,它并不意味著可以從任何地方通過require()來引用到它。 全局模式這個稱謂其實并不準確,存在諸多誤導。實際上,-g 是將一個包安裝為全局可用的可執行命令。它根據包描述文件中的bin字段配置,將實際腳本鏈接到與Node可執行文件相同的路徑下: ~~~ "bin":{ "express":"./bin/express" }, ~~~ 事實上,通過全局模式安裝的所有模塊包都被安裝進了一個統一的目錄下,這個目錄可以通過如下方式推算出來: ~~~ path.resolve(process.execPath,"..",'..','lib', 'node_modules'); ~~~ 如果Node可執行文件的位置是 /usr/local/bin/node ,那么模塊目錄就是 /usr/local/lib/node_modules。最后,通過軟鏈接的方式將bin字段配置的可執行文件鏈接到Node的可執行目錄下。 **從本地安裝** 對于一些沒有發布到NPM上的包,或是因為網絡原因導致無法直接安裝的包,可以通過將包下載到本地,然后以本地安裝。本地安裝只需為NPM指明package.json文件所在的位置即可:它可以是一個包含package.json的存檔文件,也可以是一個URL地址,也可以是一個目錄下有package.json文件的目錄位置。具體參數如下: ~~~ npm install <tarball file> npm insatll <tarball url> npm install <folder> ~~~ **從非官方源安裝** 如果不能通過官方源安裝,可以通過鏡像源安裝。在執行命令時,添加 `--registry=http://registry.url`即可,示例如下: ~~~ npm install underscore --registry=http://registry.url ~~~ 如果使用過程中幾乎都采用鏡像源安裝,可以執行一下命令行指定默認源: ~~~ npm config set registry http://registry.url ~~~ ## 3.NPM鉤子命令 另一個需要說明的是C/C++模塊實際上是編譯后才能使用的。package.json中scripts字段的提出就是讓包安裝或者等過程中提供鉤子機制,示例如下: ~~~ "scripts":{ "preinsatll":"preinstall.js", "install":"install.js", "uninstall":"uninstall.js", "test":"test.js" } ~~~ 在以上字段中執行 npm install <package> 時,preinstall 指向的腳本會被加載執行,然后install指向的腳本會被執行。在執行 npm uninstall <package> 時,uninstall指向的腳本也許會做一些清理工作等。 當在一個具體的包目錄下執行 npm test 時,將會運行 test 指向的腳本。一個優秀的包應當包含測試用例,并在package.json 文件中配置好運行測試的命令,方便用戶運行測試用例,以便檢驗包是否穩定可靠。 ## 4.發布包 為了將整個NPM的流程串聯起來,這里將演示如何編寫一個包,將其發布到NPM倉庫中,并通過NPM安裝回本地。 **編寫模塊** 模塊的內容我們盡量保持簡單,這里還是以sayHello作為例子,相關代碼如下: ~~~ exports.sayHello = function(){ return 'Hello World!'; }; ~~~ 將這段代碼保存為hello.js即可。 **初始化包描述文件** package.json文件的內容盡管相對較多,但是實際發布一個包時并不需要一行一行編寫。NPM提供的 npm init 命令會幫助你生成 package.json 文件,具體如下所示: ~~~ $npm init This unility will walk you through creating a package.json file. It only covers the most common items,and tries to guess sane defaults. See 'npm help json' for definitive documentation on these fields and exactly what they do. Use 'npm install <pkg> --save' afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (module) hello_test_jackson version: (0.0.0) 0.0.1 description: A hello world package entry point: (hello.js) ./hello.js test command: git repository: keywords: Hello world author: Jackson Tian license: (BSD) MIT About to write to /Users/jacksontian/git/divelntonode/examples/03/module/package.json { "name":"hello_test_jackson", "version":"0.0.1", "description":"A hello world package", "main":"./hello.js", "scripts":{ "test":"echo \"Error: no test specified\" && exit 1" }, "repository":"", "keywords":[ "Hello", "world" ], "author":"Jackson Tian", "license":"MIT" } Is this ok? (yes) yes npm WARN package.json hello_test_jackson@0.0.1 No README.md file found! ~~~ NPM通過提問式的交互逐個填入選項,最后生成預覽的包描述文件。如果你滿意,輸入 yes ,此時會在目錄下得到 package.json 文件。 **注冊包倉庫賬號** 為了維護包,NPM必須要使用倉庫賬號才允許將包發布到倉庫中。注冊帳號的命令是 npm adduser 。這也是一個提問式的交互過程,按順序進行即可: ~~~ $ npm add user Username: (jacksontian) Email: (shyvo1987@gmail.com) ~~~ **上傳包** 上傳包的命令是 npm publish <folder> 。在剛剛創建的 package.json 文件所在的目錄下,執行 npm publish . 開始上傳包,相關代碼如下: ![](https://box.kancloud.cn/2016-08-28_57c1cec120b7c.png) 在這個過程當中,NPM會將目錄打包為一個存檔文件,然后上傳到官方源倉庫中。 **安裝包** 為了體驗和測試自己上傳的包,可以還一個目錄執行 npm install hello_test_jackson 安裝它: ~~~ $ npm install hello_test_jackson --registry=http://registry.npmjs.org ~~~ **管理包權限** 通常,一個包只有一個人擁有權限進行發布。如果需要多人進行發布,可以使用 npm owner 命令幫助你管理包的所有者。 ![](https://box.kancloud.cn/2016-08-28_57c1cec13d1df.png) 使用這個命令,也可以添加包的擁有者,刪除一個包的擁有者: ![](https://box.kancloud.cn/2016-08-28_57c1cec154048.png) ## 5.分析包 在使用NPM的過程中,或許你不能確定當前目錄下能否通過 require() 順利引入想要的包,這時可以執行 npm ls 分析包。 這個命令可以為你分析出當前路徑下能夠通過模塊路徑找到的所有包,并生成依賴樹,如下: ![](https://box.kancloud.cn/2016-08-28_57c1cec165130.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看