我尝试创建一个npm包,它可以作为shell的命令启动。我有package.json
npm包中的二进制文件
{
"name": "myapp",
"version": "0.0.6",
"dependencies": {
"async": "",
"watch": "",
"node-promise": "",
"rmdir": "",
"should": "",
"websocket": ""
},
"bin": "myapp"
}
和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是另一个目录。我如何从脚本中获取这个目录名称?或者也许有更好的方法来做到这一点?
为什么不要给cmdline上的myapp.js'目录路径'调用脚本作为'./scriptname.sh'directory_path''然后而不是'node $ path $ file $ 1&'use'node $ 1/$ {file}' ,如果你这样做,你不需要'path = \'dirname“$ 0”\'' – PradyJord
因为这个文件是一个包的一部分。我希望这个脚本是一个简单的全局命令。 – ciembor
您需要将'$ 0'符号链接路径解析为实际的文件路径。你看过http://stackoverflow.com/questions/4774054/reliable-way-for-a-bash-script-to-get-the-full-path-to-itself? – loganfsmyth