2012-12-13 184 views
10

我使用package.json文件中的scripts部分來存儲我必須定期運行的一些命令。npm:從項目文件夾內的任意位置運行package.json中的腳本

"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從我的項目中的任何地方?

回答

0

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

例如創建一個sh文件使其運行(chmod 777 file.sh)

,然後cd到你的項目的NodeJS根,運行NPM命令,然後CD回到你剛纔離開的目錄?

添加腳本到你的環境會使其可執行從任何地方......

或者將硬編碼的完整路徑是確定? (而不是使用./ - put/home/user/username/yourproject/phantomjs)

+0

與路徑的全局標誌最後設置你的項目,然後設置標誌運行您的NPM命令之前 如 出口MY_NODE_JS_PROJECT = /家庭/用戶/用戶名/ yourproject ,然後在你的包.json有類似「MY_NODE_JS_PROJECT/test/phantomjs ... –

+0

我無法對完整路徑進行硬編碼,因爲該文件被委託給git repo並被其他人使用。這也是您首先解釋的情況:( – pkyeck

0

我發現更好的選擇是創建一個js腳本而不是shell腳本。根據我的經驗,處理npm似乎更容易。然後您可以在運行命令之前檢查您所處的環境。我們有Windows,Mac和Ubuntu的用戶,並且檢查環境或使用fs軟件包可以讓生活更輕鬆。

+6

如果您可以共享示例腳本,它會很好嗎?謝謝。 – pkyeck

2

我認爲這取決於你組織項目的方式。

我創建了一個示例項目來示範。這是我的樣本項目目錄樹:

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

注:./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財產寫的腳本,而無需使用./正確執行(定義當前目錄...)

底線 - 我猜想如果你重新組織你的項目,並刪除./將在你的情況下完成這項工作。

相關問題