npx是npm 5.2版本以後附帶的一個命令,經過npx能夠解決項目開發過程當中的問題。vue
npm不提倡全局安裝模塊,全局安裝會形成一些問題,主要問題以下:node
使用npx命令就能夠避免這個問題,npx能夠遠程執行命令。即npx會將你使用的模塊下載安裝到本地的臨時目錄,使用以後會刪除臨時目錄中的模塊。git
如安裝vue項目的時候,使用npm安裝須要兩個步驟:github
npm install -g @vue/cli
。vue create my-vue-app
使用npx:
執行npm @vue/cli create my-vue-app
便可建立項目。npm
若是在項目中安裝了某個模塊,如npm install --save-dev grunt
,npm沒法直接調用這個模塊。若是想要調用能夠用如下兩種方式:json
node_modules/.bin/grunt --version
調用。若是使用npx命令,那麼npx會自動到node_modules/.bin
路徑和環境變量$PATH
裏面,檢查命令是否存在,因此直接執行npx grunt --version
便可調用模塊。ubuntu
利用github提供的gh-pages分支能夠快速發佈本身的靜態項目。app
發佈靜態項目的步驟:grunt
完成上面三個步驟以後,就完成了靜態項目發佈,經過特定url就能夠訪問此靜態項目。工具
在github中,持續集成中的每個步驟,如抓取代碼、運行測試、發佈到第三方服務就叫作action。持續集成是由多個action配合完成的。
工做流:表示持續集成從開始到結束的一次運行過程。
任務:表示持續集成過程當中須要完成的任務,一次持續集成能夠完成多個任務。
步驟:一個任務能夠有多個步驟,這些步驟依次執行。
動做: 每一個步驟包含多個動做。
下面的例子是爲github項目添加一個基本的action,當每次代碼更新後,會自動構建並將dist目錄下的文件推送到gh-pages分支。
# 構建工做流名稱 name: publish vue project # 定義在哪一個時機下會自動構建 on: push: branches: [ master ] pull_request: branches: [ master ] # 定義構建任務 jobs: # 任務名稱 build: # 構建器類型 runs-on: ubuntu-latest # 步驟 steps: # 拉取master分支 - uses: actions/checkout@master - name: build and publish # 利用成熟的action執行構建任務 uses: JamesIves/github-pages-deploy-action@master env: ACCESS_TOKEN: ${{ secrets.test }} BRANCH: gh-pages FOLDER: dist BUILD_SCRIPT: npm install && npm run build
npm 容許在package.json中,經過scripts字段定義腳本命令。
以下:
"scripts": { "test": "echo \"this is a test\"" }
在命令行中執行npm run test
,便可輸出this is a test。
npm腳本命令在運行的時候會自動將node_modules/.bin目錄臨時添加到PATH環境變量中,所以能夠經過腳本命令調用模塊安裝的命令。
如在項目中經過npm install --save-dev -grunt
安裝模塊,那麼在scripts腳本中,便可直接調用該模塊提供的grunt命令:
"scripts": { "test": "grunt --version" }
能夠經過 & 和 && 定義腳本命令中多個任務的執行順序
"scripts": { "test": "node ./test1.js & node ./test2.js" }
表示 node ./test1.js和node ./test2.js兩個任務會同時執行。
"scripts": { "test": "node ./test1.js && node ./test2.js" }
表示 node ./test1.js和node ./test2.js兩個任務會依次執行。
npm爲腳本命令提供了兩個鉤子:pre和post,即若是在scripts字段中定義了pretest、test、posttest三個命令,那麼當執行npm run test
命令的時候,npm會首先執行pretest命令,再執行test命令,最後執行posttest命令。
能夠在npm腳本命令中經過npm_package_
前綴獲取package.json中的變量。
如package.json:
{ "name": "npm-scripts", "version": "1.0.0", "description": "", "main": "index.js", "keywords": [], "author": "", "license": "ISC" }
在test.js腳本中:
console.log(process.env.npm_package_name)
在腳本命令中:
"scripts": { "test": "node test.js", }
當運行命令的時候,能夠在控制檯輸出package.json中name字段的值。
在npm腳本中能夠經過npm_lifecycle_event
返回當前正在運行的腳本名稱。
在test.js腳本中:
console.log(process.env.npm_lifecycle_event)
在腳本命令中:
"scripts": { "test": "node test.js", }
當運行命令的時候,能夠在控制檯輸出當前正在執行的命令test。