Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript npm包中的二进制文件_Javascript_Node.js_Bash_Binary_Npm - Fatal编程技术网

Javascript npm包中的二进制文件

Javascript npm包中的二进制文件,javascript,node.js,bash,binary,npm,Javascript,Node.js,Bash,Binary,Npm,我尝试创建一个npm包,它可以作为来自shell的命令启动。我有package.json { "name": "myapp", "version": "0.0.6", "dependencies": { "async": "", "watch": "", "node-promise": "", "rmdir": "", "should": "", "websocket": "" }, "bin": "myapp" } 和mya

我尝试创建一个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


。。。或者,如果您不想直接调用
myapp.js
,可以创建这样的脚本作为可执行文件:

#!/usr/bin/env node

var myapp = require('<relative_path_to_myapp.js>/myapp.js');
myapp.doSth();
希望这些帮助:D

从以上链接:

要使用它,请在package.json中提供一个bin字段,它是命令名到本地文件名的映射。安装时,npm会将该文件符号链接到前缀/bin中进行全局安装,或将该文件符号链接到/node\u modules/.bin/中进行本地安装

例如,myapp可能有以下功能:

{ "bin" : { "myapp" : "./cli.js" } }
因此,当您安装myapp时,它将创建一个从cli.js脚本到/usr/local/bin/myapp的符号链接


为什么不在cmdline上给myapp.js
目录路径
调用脚本为
/scriptname.sh'directory\u path'
,然后使用
节点$1/${file}
代替
节点$path$file$1&
使用
节点$1/${file}
,如果这样做,就不需要
路径=`dirname“$0`
,因为该文件是包的一部分。我希望这个脚本是一个简单的全局命令。您需要将
$0
符号链接路径解析为实际的文件路径。你看了吗?是的,我知道,但我不知道
myapp.js
在哪里,它安装了一个包,应该在不同的目录中。问题是如何找到该文件的路径。非常感谢,这非常有用!
"bin" : { "myapp" : "<relative_path_to_the_script>/script.js" }
myapp_path=$( npm explore -g myapp -- "pwd" )
{ "bin" : { "myapp" : "./cli.js" } }