簡體   English   中英

NPM 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.

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