簡體   English   中英

npm:從項目文件夾內的任何位置運行 package.json 中的腳本

[英]npm: run scripts from package.json from anywhere inside the project folder

我正在使用 package.json 文件中的scripts部分來存儲我必須定期運行的一些命令。

 "scripts": {
    "test": "./test/phantomjs ./test/js/run_jasmine_test.coffee ./test/index.html",
    "rjs": "r.js -o ./js/app.build.js",
    "less": "lessc -x ./css/app.less > ./css/app.css"
  }

在每個命令中,我在路徑的開頭都有一個./ - 這就是為什么我只能從項目的根目錄調用npm run-script rjs的原因。 有沒有辦法在 package.json 中引用項目的根目錄,以便我可以從項目中的任何位置運行例如npm test

我認為這取決於您組織項目的方式。

我創建了一個示例項目只是為了演示。 這是我的示例項目目錄樹:

.
├── dir1
│   └── dir2
├── package.json
├── src
│   └── index.js
└── test
    └── test.js

注意: ./dir1/ ./dir1/dir2只是用於演示的兩個空目錄。

我的package.json文件如下所示:

{
  "name": "sample",
  "version": "1.0.0",
  "description": "sample",
  "main": "index.js",
  "scripts": {
    "test": "node test/test.js",
    "start": "node src/index.js"
  },
  "author": "yaniv",
  "license": "ISC"
}

專注於腳本部分,這兩行很簡單,沒有考慮我的位置。

如果我將目錄更改為/dir1/dir2並執行npm test並且我在test屬性上編寫的腳本在不使用./ (定義當前目錄...)的情況下正確執行

底線- 我想如果你重新組織你的項目並刪除./將完成你的工作。

INIT_CWD

我們可以通過npm為我們設置的環境變量INIT_CWD來引用項目的根目錄!

來自文檔

腳本從模塊的根目錄運行,無論您調用 npm run 時當前的工作目錄是什么。 如果你希望你的腳本根據你所在的子目錄使用不同的行為,你可以使用INIT_CWD環境變量,它保存你運行 npm run 時所在的完整路徑。

例子:

"tas:adminApp:build": "cd src/KidoService/AdminApp && npm run build && cd $INIT_CWD && gulp build_copyAdminApp",

只是因為我愛想太多!

如果我們沒有為我們設置這樣的變量怎么辦!

我們可以在所有啟動時執行一個環境變量設置命令! export ROOT_DIR=$PDW

然后在我們需要的時候! 我們可以使用它!

上面的例子會變成

"tas:adminApp:build": "export ROOT_DIR=$PDW && cd src/KidoService/AdminApp && npm run build && cd $ROOT_DIR && gulp build_copyAdminApp",

你可以看到這是一個很好的技術! 我們可以使用它來引用我們想要返回的一些目錄!

對於 Windows,我們使用set VAR=VALUE

考慮創建一個運行的 shell 文件?

例如創建 a.sh 文件使其可執行 (chmod 777 file.sh)

然后 cd 到你的 nodejs 項目根目錄,運行 npm 命令,然后 cd 回到你剛剛離開的目錄?

將腳本添加到您的環境將使它可以從任何地方執行...

或者將硬編碼完整路徑可以嗎? (所以而不是使用./ - 放/home/user/username/yourproject/phantomjs)

我正在使用 package.json 文件中的scripts部分來存儲一些我必須定期運行的命令。

 "scripts": {
    "test": "./test/phantomjs ./test/js/run_jasmine_test.coffee ./test/index.html",
    "rjs": "r.js -o ./js/app.build.js",
    "less": "lessc -x ./css/app.less > ./css/app.css"
  }

在每個命令中,我在路徑的開頭都有一個./ - 這就是為什么我只能從項目的根目錄調用npm run-script rjs 有沒有辦法在 package.json 中引用項目的根目錄,以便我可以從項目的任何地方運行例如npm test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM