[英]npm install --global (for all dependencies on package.json)
[英]NPM package.json dependencies and their executables in local vs global
我認為npm install|update
在需要源文件中的依賴項時有效,但是當我想運行可執行文件時,比如nodemon
,它似乎不起作用。 它是否試圖在全球范圍內查找文件? 如何讓這些命令首先在node_modules
查找?
我有一個Cakefile,用nodemon
啟動dev服務器。 例如:
# **`procExec(procName)`**
# returns the path to executable in `node_`
procExec = (procName) ->
console.log "./node_modules/" + procName + "/bin/" + procName
"./node_modules/.bin/" + procName
# **`cake startdev`**
# Starts the server with `nodemon`
# Watch and compile `.coffee` and `.styl` files in `/client`
task "startdev", "Starts server with nodemon and watch files for changes", ->
# start nodemon server
nodemon = spawn procExec("nodemon"), ["server.coffee"]
processOutput nodemon
# watch and compile CoffeeScript
coffee = spawn procExec("coffee"), ["-o", "public/js/app", "-cw", "client/coffee"]
processOutput coffee
# watch and compile Stylus
stylus = spawn procExec("stylus"), ["client/stylus", "-l", "-w", "-o", "public/css/app"]
processOutput stylus
它有效,但有一些小問題:
npm install|update
似乎沒有安裝nodemon
。 我認為它試圖全局安裝並失敗。 我分別手動執行了npm install nodemon
。 為什么是這樣? 我怎么能告訴nodemon
要安裝? "./node_modules/.bin/" + procName
是否始終解析為正確的可執行文件? 這里有幾個問題,所以我會嘗試將它們分開。
npm install | update似乎沒有安裝nodemon。 我認為它試圖全局安裝並失敗。 我分別手動執行了npm install nodemon。 為什么是這樣? 我怎么能告訴nodemon還是要安裝?
您是否看到有關“首選全局安裝”的警告? 如果是這種情況,它只是一個警告,它將會被安裝。 如果是不同的錯誤,請包括輸出。
“./node_modules/.bin/”+ procName是否始終解析為正確的可執行文件?
是的,依賴項的package.json文件中列出的任何腳本都將安裝到此文件夾中。 但是,我更喜歡使用npm bin
命令來始終獲取正確的路徑。
如果要從節點生成進程,還可以require('npm')
並修改process.env.PATH
以獲取正確的node_modules/.bin
。 例如,在Cakefile的頂部:
npm = require 'npm'
npm.load (err) -> throw err # If config fails to load, bail out early
process.env.PATH = npm.bin + ":" + process.env.PATH
# Now you no longer need to use procExec in your tasks
免責聲明我不知道修改PATH是否適用於Windows。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.