在我們的環境中,我們正在構建一個build/util工具,供許多用戶使用,無需外部(或系統範圍)依賴項。也就是說,我們正在嘗試構建這個模型,以便用戶不必關心他們在全局安裝的node.js版本,因爲我們在工具目錄中打包了node.js二進制文件。 (請不要評論這種方法的優點)。Node.js,Bash腳本和目錄本地節點二進制文件
我們的刀具結構是這樣:
/web/tool/
/web/tool/bin/ (where the node binary lives)
/web/tool/node_modules
我們/網絡/工具/斌在任一執行腳本添加到$ PATH變量(第一順序)或grunt.js任務確保本地二進制文件路徑勝過其他文件。
執行任何bash腳本或grunt.js任務後,初始任務將查找正確的節點二進制文件。這是在沒有全局安裝節點的環境中測試的,所以我們知道它找到了目錄本地節點二進制文件。然而,從這些腳本/ grunt-tasks中產生的任何後續進程都在全局尋找節點二進制文件。
我們特定的用戶案例是通過一個咕嚕任務運行karma和phantomjs。在bash腳本/對因果報應箱,咕嚕-CLI(呼嚕聲),並phantomjs都具有
#!/usr/bin/env node
熟悉的頭指令我們應該如何去建立,使我們的工具一直在尋找的目錄,本地節點二進制,即使在後續的子進程?
你可以編寫一個包裝腳本來查找'node'二進制文件並執行諸如'export NODE =/web/tool/bin/node'之類的操作來設置環境變量爲本地NodeJS二進制文件腳本? –
爲什麼後續進程必須全局查找節點,如果您有要執行第一個進程的節點的二進制文件的路徑名?也聽起來像nodejs virtualenv,所以你嘗試http://stackoverflow.com/questions/3653495/is-there-an-virtual-environment-for-node-js? – leorex
@MichaelTang這是問題的關鍵。我們可以暫時爲一個命令改變envars,但隨後的子進程不會看到它。 – shellscape