我认为npm install|update
在需要源文件中的依赖项时有效,但是当我想运行可执行文件时,如nodemon
,它似乎不起作用。它是否试图在全球范围内查找文件?如何首先在node_modules
中查看这些命令?
我有一个Cakefile,用nodemon
启动开发服务器。例如:
# **`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
是否始终解析为正确的可执行文件? 答案 0 :(得分:2)
这里有几个问题,所以我会尝试将它们分开。
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。