我制作了一个小npm软件包并部署了它,基本上这是一个内置于节点中的CLI工具,我正在尝试减少执行它所需的命令
到目前为止,要使用CLI,请按照以下步骤操作:
-> npm install my_package(显然)
-> cd node_modules / my_package
-> node index.js
运行node node_modules/my_package/index.js
不能得到预期的结果,因为我使用 PropertyReader 从 .properties 文件读取,并且如果我没有运行CLI,从包含此文件的文件夹中,我最终得到错误 '没有这样的文件或目录'
这是包装的结构
/node_modules
|__ /my_package
|__ index.js
|__ my.properties
我的index.js的一部分可以帮助您:
#!/usr/bin/env node
"use strict";
var PropertiesReader = require('properties-reader');
properties = PropertiesReader('./my.properties');
理想的情况是安装软件包并运行一个命令来启动我的CLI,欢迎任何可以帮助您的建议或想法
谢谢
答案 0 :(得分:1)
注意:此答案假设您使用的是Unix风格的操作系统,例如Linux或OSX。
通常,您在项目目录中的某个位置创建一个可运行命令,然后使用npm link
将其链接到./node_modules/.bin
(或全局可执行目录)中。
如果您选择将命令保留在项目中(而不是在全局安装),请务必确保PATH包含./node_modules/.bin
(如export PATH=./node_modules/.bin:$PATH
),以便可以调用新命令CLI。
有关完整的解决方案,请参见A guide to creating a NodeJS command-line package。
最后,如果您希望引用相对于安装目录的资源,则需要使用path.resolve加载资源,以将相对路径转换为绝对路径,例如:var res = require(path.resolve(__dirname, '../config/file'))
其中{{ 1}}代表CLI所在的目录。
所以假设:
__dirname
在./
index.js
package.json
bin/
cli
config/
my.properties
中,您将:
./bin/cli
答案 1 :(得分:0)
我依靠__dirname来调整建议的解决方案以满足我的需求,以获取我的 index.js 的绝对路径,并从中找到属性文件
const path = require("path");
var dirpath = path.resolve(__dirname);
properties = PropertiesReader(path.join(dirpath, "my.properties"));
现在,我仍然必须找到一种方法来将命令node node_modules/my_package/index.js
替换为start my_package
或仅替换my_package
,在我全局安装my_package时,BTW默认工作( npm install -g my_package )(我只是在CMD中运行my_package
,它可以正常工作!)
有人知道即使我在本地安装该行为也该如何重现此行为?