<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## 簡介 npm有兩層含義。一層含義是Node.js的開放式模塊登記和管理系統,網址為[http://npmjs.org](http://npmjs.org/)。另一層含義是Node.js默認的模塊管理器,是一個命令行下的軟件,用來安裝和管理node模塊。 npm不需要單獨安裝。在安裝node的時候,會連帶一起安裝npm。但是,node附帶的npm可能不是最新版本,最好用下面的命令,更新到最新版本。 ~~~ $ npm install npm@latest -g ~~~ 上面的命令之所以最后一個參數是npm,是因為npm本身也是Node.js的一個模塊。 node安裝完成后,可以用下面的命令,查看一下npm的幫助文件。 ~~~ # npm命令列表 $ npm help # 各個命令的簡單用法 $ npm -l ~~~ 下面的命令分別查看npm的版本和配置。 ~~~ $ npm -v $ npm config list -l ~~~ ## npm info `npm info`命令可以查看每個模塊的具體信息。比如,查看underscore模塊信息的命令是: ~~~ $ npm info underscore { name: 'underscore', description: 'JavaScript\'s functional programming helper library.', 'dist-tags': { latest: '1.5.2', stable: '1.5.2' }, repository: { type: 'git', url: 'git://github.com/jashkenas/underscore.git' }, homepage: 'http://underscorejs.org', main: 'underscore.js', version: '1.5.2', devDependencies: { phantomjs: '1.9.0-1' }, licenses: { type: 'MIT', url: 'https://raw.github.com/jashkenas/underscore/master/LICENSE' }, files: [ 'underscore.js', 'underscore-min.js', 'LICENSE' ], readmeFilename: 'README.md'} ~~~ 上面命令返回一個JavaScript對象,包含了underscore模塊的詳細信息。這個對象的每個成員,都可以直接從info命令查詢。 ~~~ $ npm info underscore description JavaScript's functional programming helper library. $ npm info underscore homepage http://underscorejs.org $ npm info underscore version 1.5.2 ~~~ ## npm search 向npm倉庫搜索某個模塊,使用search命令(可使用正則搜索)。 ~~~ $ npm search <搜索詞> ~~~ 如果不加搜索詞,`npm search`默認返回npm倉庫的所有模塊。 ## npm list `npm list`命令列出當前目錄安裝的所有模塊。如果使用global參數,就是列出全局安裝的模塊。 ~~~ $ npm list $ npm -global list ~~~ ## npm install Node模塊采用`npm install`命令安裝。每個模塊可以“全局安裝”,也可以“本地安裝”。兩者的差異是模塊的安裝位置,以及調用方法。 “全局安裝”指的是將一個模塊直接下載到Node的安裝目錄中,各個項目都可以調用。“本地安裝”指的是將一個模塊下載到當前目錄的node_modules子目錄,然后只有在當前目錄和它的子目錄之中,才能調用這個模塊。一般來說,全局安裝只適用于工具模塊,比如npm和grunt。 默認情況下,`npm install`命令是“本地安裝”某個模塊。 ~~~ $ npm install <package name> ~~~ npm也支持直接輸入github地址。 ~~~ $ npm install git://github.com/package/path.git $ npm install git://github.com/package/path.git#0.1.0 ~~~ 運行上面命令后,模塊文件將下載到當前目錄的`node_modules`子目錄。 使用global參數,可以“全局安裝”某個模塊。global參數可以被簡化成g參數。 ~~~ $ sudo npm install -global [package name] $ sudo npm install -g [package name] ~~~ install命令總是安裝模塊的最新版本,如果要安裝模塊的特定版本,可以在模塊名后面加上@和版本號。 ~~~ $ npm install sax@latest $ npm install sax@0.1.1 $ npm install sax@">=0.1.0 <0.2.0" ~~~ install命令可以使用不同參數,指定所安裝的模塊屬于哪一種性質的依賴關系,即出現在packages.json文件的哪一項中。 * --save:模塊名將被添加到dependencies,可以簡化為參數`-S`。 * --save-dev: 模塊名將被添加到devDependencies,可以簡化為參數`-D`。 ~~~ $ npm install sax --save $ npm install node-tap --save-dev # 或者 $ npm install sax -S $ npm install node-tap -D ~~~ `npm install`默認會安裝dependencies字段和devDependencies字段中的所有模塊,如果使用production參數,可以只安裝dependencies字段的模塊。 ~~~ $ npm install --production # 或者 $ NODE_ENV=production npm install ~~~ 一旦安裝了某個模塊,就可以在代碼中用require命令調用這個模塊。 ~~~ var backbone = require('backbone') console.log(backbone.VERSION) ~~~ ## 語義版本(SemVer) npm采用”語義版本“管理軟件包。所謂語義版本,就是指版本號為`a.b.c`的形式,其中a是大版本號,b是小版本號,c是補丁號。 一個軟件發布的時候,默認就是 1.0.0 版。如果以后發布補丁,就增加最后一位數字,比如1.0.1;如果增加新功能,且不影響原有的功能,就增加中間的數字(即小版本號),比如1.1.0;如果引入的變化,破壞了向后兼容性,就增加第一位數字(即大版本號),比如2.0.0。 npm允許使用特殊符號,指定所要使用的版本范圍,假定當前版本是1.0.4。 * 只接受補丁包:1.0 或者 1.0.x 或者 ~1.0.4 * 只接受小版本和補丁包:1 或者 1.x 或者 ^1.0.4 * 接受所有更新:* or x 對于~和^,要注意區分。前者表示接受當前小版本(如果省略小版本號,則是當前大版本)的最新補丁包,后者表示接受當前大版本的最新小版本和最新補丁包。 ~~~ ~2.2.1 // 接受2.2.1,不接受2.3.0 ^2.2.1 // 接受2.2.1和2.3.0 ~2.2 // 接受2.2.0和2.2.1,不接受2.3.0 ^2.2 // 接受2.2.0、2.2.1和2.3.0 ~2 // 接受2.0.0、2.1.0、2.2.0、2.2.1和2.3.0 ^2 // 接受2.0.0、2.1.0、2.2.0、2.2.1和2.3.0 ~~~ 還可以使用數學運算符(比如>, = or <=等),指定版本范圍。 ~~~ >2.1 1.0.0 - 1.2.0 >1.0.0-alpha >=1.0.0-rc.0 <1.0.1 ^2 <2.2 || > 2.3 ~~~ 注意,如果使用連字號,它的兩端必須有空格。如果不帶空格,會被npm理解成預發布的tag,比如1.0.0-rc.1。 ## npm update,npm uninstall npm update 命令可以升級本地安裝的模塊。 ~~~ npm update [package name] ~~~ 加上global參數,可以升級全局安裝的模塊。 ~~~ npm update -global [package name] ~~~ npm uninstall 命令,刪除本地安裝的模塊。 ~~~ npm uninstall [package name] ~~~ 加上global參數,可以刪除全局安裝的模塊。 ~~~ sudo npm uninstall [package name] -global ~~~ ## npm shrinkwrap 對于一個項目來說,通常不會寫死依賴的npm模塊的版本。比如,開發時使用某個模塊的版本是1.0,那么等到用戶安裝時,如果該模塊升級到1.1,往往就會安裝1.1。 但是,對于開發者來說,有時最好鎖定所有依賴的版本,防止模塊升級帶來意想不到的問題。但是,由于模塊自己還依賴別的模塊,這一點往往很難做到。舉例來說,項目依賴A模塊,A模塊依賴B模塊。即使寫死A模塊的版本,但是B模塊升級依然可能導致不兼容。 `npm shrinkwrap`命令就是用來徹底鎖定所有模塊的版本。 ~~~ $ npm shrinkwrap ~~~ 運行上面這個命令以后,會在項目目錄下生成一個npm-shrinkwrap.json文件,里面包含當前項目用到的所有依賴(包括依賴的依賴,以此類推),以及它們的準確版本,也就是當前正在使用的版本。 只要存在`npm-shrinkwrap.json`文件,下一次用戶使用`npm install`命令安裝依賴的時候,就會安裝所有版本完全相同的模塊。 如果執行`npm shrinkwrap`的時候,加上參數dev,還可以記錄devDependencies字段中模塊的準確版本。 ~~~ $ npm shrinkwrap --dev ~~~ ## npm prune `npm prune`命令與`npm shrinkwrap`配套使用。 使用`npm shrinkwrap`的時候,有時可能存在某個已經安裝的模塊不在dependencies字段內的情況,這時`npm shrinkwrap`?就會報錯。 `npm prune`命令可以移除所有不在dependencies字段內的模塊。所有指定模塊名,則移除單個模塊。 ~~~ $ npm prune $ npm package <package name> ~~~ ## npm run package.json文件有一項scripts,用于指定腳本命令,供npm直接調用。 ~~~ { "name": "myproject", "devDependencies": { "jshint": "latest", "browserify": "latest", "mocha": "latest" }, "scripts": { "lint": "jshint **.js", "test": "mocha test/" } } ~~~ 上面代碼中,scripts指定了兩項命令lint和test。命令行輸入`npm run lint`,就會執行`jshint **.js`,輸入`npm run test`,就會執行`mocha test/`。npm內置了兩個命令簡寫,`npm test`等同于執行`npm run lint`,`npm start`等同于執行`npm run start`。 `npm run`會創建一個shell,執行指定的命令,并將`node_modules/.bin`加入PATH變量,這意味著本地模塊可以直接運行。也就是說,`npm run lint`直接運行`jshint **.js`即可,而不用`./node_modules/.bin/jshint **.js`。 如果直接運行`npm run`不給出任何參數,就會列出scripts屬性下所有命令。 ~~~ Available scripts in the user-service package: lint jshint **.js test mocha test/ ~~~ 下面是另一個package.json文件的例子。 ~~~ "scripts": { "watch": "watchify client/main.js -o public/app.js -v", "build": "browserify client/main.js -o public/app.js", "start": "npm run watch & nodemon server.js", "test": "node test/all.js" }, ~~~ 上面代碼在scripts項,定義了四個別名,每個別名都有對應的腳本命令。 ~~~ npm run watch npm run build npm run start npm run test ~~~ 其中,start和test屬于特殊命令,可以省略run。 ~~~ npm start npm test ~~~ 如果希望一個操作的輸出,是另一個操作的輸入,可以借用Linux系統的管道命令,將兩個操作連在一起。 ~~~ "build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js" ~~~ 但是,更方便的寫法是引用其他`npm run`命令。 ~~~ "build": "npm run build-js && npm run build-css" ~~~ 上面的寫法是先運行`npm run build-js`,然后再運行`npm run build-css`,兩個命令中間用`&&`連接。如果希望兩個命令同時平行執行,它們中間可以用`&`連接。 下面是一個流操作的例子。 ~~~ "devDependencies": { "autoprefixer": "latest", "cssmin": "latest" }, "scripts": { "build:css": "autoprefixer -b 'last 2 versions' < assets/styles/main.css | cssmin > dist/main.css" } ~~~ 寫在scripts屬性中的命令,也可以在`node_modules/.bin`目錄中直接寫成bash腳本。 ~~~ #!/bin/bash cd site/main; browserify browser/main.js | uglifyjs -mc > static/bundle.js ~~~ 假定上面的腳本文件名為build.sh,并且權限為可執行,就可以在scripts屬性中引用該文件。 ~~~ "build-js": "bin/build.sh" ~~~ `npm run`為每條命令提供了pre和post兩個鉤子(hook)。以`npm run lint`為例,執行這條命令之前,npm會先查看有沒有定義prelint和postlint兩個鉤子,如果有的話,就會先執行`npm run prelint`,然后執行`npm run lint`,最后執行`npm run postlint`。所有命令都是這樣,包括`npm test`(即實際存在`npm run pretest`、`npm run test`、`npm run posttest`三條命令)。如果執行過程出錯,就不會執行排在后面的命令,即如果pretest命令執行出錯,就不會接著執行 test和posttest命令。不能在pre命令之前再加pre,即prepretest命令不起作用。另外,還可以為一些內部命令指定pre和post的鉤子:install、uninstall、publish、update。 ~~~ "scripts": { "lint": "jshint **.js", "build": "browserify index.js > myproject.min.js", "test": "mocha test/", "prepublish": "npm run build # also runs npm run prebuild", "prebuild": "npm run test # also runs npm run pretest", "pretest": "npm run lint" } ~~~ `npm run`命令還可以添加參數。 ~~~ "scripts": { "test": "mocha test/" } ~~~ 上面代碼指定`npm test`,實際運行`mocha test/`。可以在`npm test`命令后面加上參數,比如`npm run test -- anothertest.js`,實際運行的是`mocha test/ anothertest.js`。 ## npm link 一般來說,每個項目都會在項目目錄內,安裝所需的模塊文件。也就是說,各個模塊是局部安裝。但是有時候,我們希望模塊是一個符號鏈接,連到外部文件,這時候就需要用到npm link命令。 為了理解npm link,請設想這樣一個場景。你開發了一個模塊myModule,目錄為src/myModule,你自己的項目myProject要用到這個模塊,項目目錄為src/myProject。每一次,你更新myModule,就要用`npm publish`命令發布,然后切換到項目目錄,使用`npm update`更新模塊。這樣顯然很不方便,如果我們可以從項目目錄建立一個符號鏈接,直接連到模塊目錄,就省去了中間步驟,項目可以直接使用最新版的模塊。 先在模塊目錄(src/myModule)下運行npm link命令。 ~~~ src/myModule$ npm link ~~~ 上面的命令會在npm的全局模塊目錄內(比如/usr/local/lib/node_modules/),生成一個符號鏈接文件,該文件的名字就是package.json文件中指定的文件名。 ~~~ /usr/local/lib/node_modules/myModule -> src/myModule ~~~ 然后,切換到你需要放置該模塊的項目目錄,再次運行npm link命令,并指定模塊名。 ~~~ src/myProject$ npm link myModule ~~~ 上面命令等同于生成了本地模塊的符號鏈接。 ~~~ src/myProject/node_modules/myModule -> /usr/local/lib/node_modules/myModule ~~~ 然后,就可以在你的項目中,加載該模塊了。 ~~~ var myModule = require('myModule'); ~~~ 這樣一來,myModule的任何變化,都可以直接在myProject中調用。但是,同時也出現了風險,任何在myProject目錄中對myModule的修改,都會反映到模塊的源碼中。 npm link命令有一個簡寫形式,顯示連接模塊的本地目錄。 ~~~ $ src/myProject$ npm link ../myModule ~~~ 上面的命令等同于下面幾條命令。 ~~~ $ src/myProject$ cd ../myModule $ src/myModule$ npm link $ src/myModule$ cd ../myProject $ src/myProject$ npm link myModule ~~~ 如果你的項目不再需要該模塊,可以在項目目錄內使用npm unlink命令,刪除符號鏈接。 ~~~ src/myProject$ npm unlink myModule ~~~ 一般來說,npm公共模塊都安裝在系統目錄(比如/usr/local/lib/),普通用戶沒有寫入權限,需要用到sudo命令。這不是很方便,我們可以在沒有root的情況下,用好npm。 首先在主目錄下新建配置文件.npmrc,然后在該文件中將prefix變量定義到主目錄下面。 ~~~ prefix = /home/yourUsername/npm ~~~ 然后在主目錄下新建npm子目錄。 ~~~ $ mkdir ~/npm ~~~ 此后,全局安裝的模塊都會安裝在這個子目錄中,npm也會到`~/npm/bin`目錄去尋找命令。因此,`npm link`就不再需要 root權限了。 最后,將這個路徑在.bash_profile文件(或.bashrc文件)中加入PATH變量。 ~~~ export PATH=~/npm/bin:$PATH ~~~ ## npm publish 在發布你的模塊之前,需要先設定個人信息。 ~~~ $ npm set init.author.name “張三” $ npm set init.author.email “zhangsan@email.com” $ npm set init.author.url “http://your.url.com" ~~~ 這些信息會存放在用戶主目錄的`~/.npmrc`文件,使得用戶不用每個項目都輸入。如果遇到某個模塊的作者信息,與全局設置不同,可以在項目目錄中,單獨設置一次上面這些命令。 然后,向npm系統申請用戶名。 ~~~ $ npm adduser ~~~ 運行上面的命令之后,屏幕上會提示輸入用戶名,然后是輸入Email地址和密碼。 如果已經注冊過,就使用下面的命令登錄。 ~~~ $ npm login ~~~ 最后,使用npm publish命令發布。 ~~~ $ npm publish ~~~ ## npm version `npm version`命令用來修改項目的版本號。當你完成代碼修改,要發布新版本的時候,就用這個命令更新一下軟件的版本。 ~~~ $ npm version <update_type> -m "<message>" ~~~ `npm version`命令的update_type參數有三個選項:patch、minor、major。 * `npm version patch`增加一位補丁號(比如 1.1.1 -> 1.1.2) * `npm version minor`增加一位小版本號(比如 1.1.1 -> 1.2.0) * `npm version major`增加一位大版本號(比如 1.1.1 -> 2.0.0)。 下面是一個例子。 ~~~ $ npm version patch -m "Version %s - xxxxxx" ~~~ 上面命令的%s表示新的版本號。 除了增加版本號,`npm version`命令還會為這次修改,新增一個git commit記錄,以及一個新的git tag。 由于更新npm網站的唯一方法,就是發布一個新的版本。因此,除了第一次發布,這個命令與`npm publish`幾乎是配套的,先使用它,再使用`npm publish`。 ## 參考鏈接 * James Halliday,?[task automation with npm run](http://substack.net/task_automation_with_npm_run): npm run命令(package.json文件的script屬性)的用法 * Keith Cirkel,?[How to Use npm as a Build Tool](http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/) * justjs,?[npm link: developing your own npm modules without tears](http://justjs.com/posts/npm-link-developing-your-own-npm-modules-without-tears)
                  <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>

                              哎呀哎呀视频在线观看