[英]Binary file in npm package
我尝试创建一个npm包,它可以作为shell中的命令启动。 我有package.json
{
"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在另一个目录中。 如何从我的脚本中获取此目录名称? 或者也许有更好的方法来做到这一点?
实际上,您可以将myapp.js
文件放入bin
。
所以,package.json文件中的bin键应该是这样的:
"bin": { "myapp" : "<relative_path_to_myapp.js>/lib/myapp.js" }
在myapp.js
的第一行,你必须添加这个shebang行:
#!/usr/bin/env node
它告诉系统使用node
来运行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" }
通过这种方式,您可以避免找到nodemodule的路径。
但是......如果你坚持使用旧的myapp
bash脚本,那么你可以找到模块的路径:
myapp_path=$( npm explore -g myapp -- "pwd" )
希望这些帮助:D
https://docs.npmjs.com/files/package.json#bin
从以上链接:
...
要使用它,请在package.json中提供bin字段,该字段是命令名到本地文件名的映射。 在安装时,npm会将该文件符号链接到用于全局安装的前缀/ bin ,或者用于本地安装的./node_modules/.bin/ 。
例如,myapp可以这样:
{ "bin" : { "myapp" : "./cli.js" } }
因此,当您安装myapp时,它将创建一个从cli.js脚本到/ usr / local / bin / myapp的符号链接。
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.