簡體   English   中英

npm包中的二進制文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM