如何在node.js
中使用模块的本地版本。例如,在我的应用中,我安装了coffee-script:
npm install coffee-script
此将其安装在./node_modules
中,并且Coffee命令在./node_modules/.bin/coffee
中。当我位于项目的主文件夹中时,是否可以运行此命令?我想我正在寻找与捆扎机中的bundle exec
类似的东西。基本上,我想指定一个咖啡脚本的版本,参与该项目的每个人都应该使用。
我知道我可以添加-g
标志以在全球范围内安装它,因此咖啡在任何地方都可以正常工作,但是如果我想每个项目使用不同版本的咖啡怎么办?
UPDATE
我更喜欢不依赖shell别名或其他软件包。
在.\node_modules\.bin\wdio wdio.conf.js
的scripts
部分添加简单的行,您可以运行本地npm命令,如
如果要根据当前工作目录正确更新PATH变量,请将其添加到等价于{
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack"
},
"devDependencies": {
"webpack": "^4.1.1",
"webpack-cli": "^2.0.11"
}
}
的末尾(或在定义.bashrc
的任何内容之后:]
PATH
我一直使用与@guneysus相同的方法来解决此问题,该方法是在package.json文件中创建一个脚本,并使用它运行npm run script-name。
但是,最近几个月我一直在使用node-mode-off
,我喜欢它。
Here's an article就像是nodejs的“ bundle exec”。它类似于使用zxc:
PATH=$(npm bin):$PATH
相同,@ regular的可接受的解决方案,但鱼壳有味道
$ npm install -g zxc
$ npm install gulp
$ zxc which gulp
/home/nathan/code/project1/node_modules/.bin/gulp
您也可以使用direnv并仅在工作文件夹中更改$ PATH变量。
if not contains (npm bin) $PATH
set PATH (npm bin) $PATH
end
将此脚本添加到您的$ cat .envrc
> export PATH=$(npm bin):$PATH
。然后,您可以呼叫.bashrc
或在本地进行任何操作。这对于您的笔记本电脑很方便,但是请不要在服务器上使用它。
coffee
对于Windows使用此:
cd
我遇到了相同的问题,我不特别喜欢使用别名(如/* cmd into "node_modules" folder */
"%CD%\.bin\grunt" --version
的建议),如果您也不太喜欢它们,那么我将使用另一种解决方法,您首先必须创建一个别名可执行bash脚本,例如setenv.sh:
我很想知道这是否是一个不安全/不好的主意,但经过一番思考,我在这里看不到问题:
修改Linus不安全的解决方案以将其添加到末尾,使用...,
scripts: {
'start': './setenv.sh <command>'
}
查找目录,并使脚本仅在父级中存在npm bin
时才调用npm bin
(为了提高速度),这就是我想出了package.json
:
我是__add-node-to-path() {
if [ "$(find-up package.json)" != "" ]; then
new_bin=$(npm bin)
if [ "$NODE_MODULES_PATH" != "$new_bin" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}:$new_bin
export NODE_MODULES_PATH=$new_bin
fi
else
if [ "$NODE_MODULES_PATH" != "" ]; then
export PATH=${PATH%:$NODE_MODULES_PATH}
export NODE_MODULES_PATH=""
fi
fi
}
export PROMPT_COMMAND="__add-node-to-path"
用户,这对我有用:
Windows
[如果您使用// First set some variable - i.e. replace is with "xo"
D:\project\root> set xo="./node_modules/.bin/"
// Next, work with it
D:\project\root> %xo%/bower install
,并且出于安全原因不想添加到fish shell
。我们可以添加以下函数来运行本地节点可执行文件。
$path
现在您可以运行类似:
在package.json中包含coffee-script以及每个项目所需的特定版本,通常是这样的:
fishshell
然后运行npm install在每个项目中安装依赖项。这将安装指定版本的coffee-script,可在每个项目本地访问。
使用npm bin
命令获取项目的节点模块/ bin目录
使用npm run[-script] <script name>
使用npm-run
。
更新:
PATH解决方案的问题是,如果$(npm bin)放在您的.profile / .bashrc / etc中,则它会被评估一次,并永远设置为该路径首先在其中评估的目录。如果您修改当前路径,那么每次运行脚本时,路径都会增加。
如果要保留npm,则npm-exec r.js <args>
应该做您需要的事情。