我尝试创建一个 npm 包,它可以作为 shell 中的命令启动。我有package.json
{
"name": "myapp",
"version": "0.0.6",
"dependencies": {
"async": "",
"watch": "",
"node-promise": "",
"rmdir": "",
"should": "",
"websocket": ""
},
"bin": "myapp"
}
and myapp
#!/bin/bash
path=`dirname "$0"`
file="/myapp.js"
node $path$file $1 &
但我收到一个错误:
module.js:340
throw err;
^
Error: Cannot find module '/usr/local/bin/myapp.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
问题是 myapp.js 在另一个目录中。如何从我的脚本中获取此目录名称?或者也许有更好的方法来做到这一点?
事实上,你可以把你的myapp.js
文件到bin
.
因此,package.json 文件中的 bin 键应该是这样的:
"bin": { "myapp" : "<relative_path_to_myapp.js>/lib/myapp.js" }
在第一行myapp.js
,您必须添加此 shebang 行:
#!/usr/bin/env node
它告诉系统使用node
to run myapp.js
.
...或者如果您不想打电话myapp.js
直接,您可以创建一个像这样的脚本作为您的可执行文件:
#!/usr/bin/env node
var myapp = require('<relative_path_to_myapp.js>/myapp.js');
myapp.doSth();
并在 package.json 中:
"bin" : { "myapp" : "<relative_path_to_the_script>/script.js" }
无论哪种方式,您都可以避免找到节点模块的路径。
但是...如果你坚持使用旧的myapp
bash 脚本,然后您可以使用以下命令找到模块的路径:
myapp_path=$( npm explore -g myapp -- "pwd" )
希望这些有帮助:D
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)