有没有办法减少执行从npm安装的节点应用程序的命令

时间:2019-05-23 19:27:41

标签: node.js npm cmd package

我制作了一个小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,欢迎任何可以帮助您的建议或想法

谢谢

2 个答案:

答案 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,它可以正常工作!)

有人知道即使我在本地安装该行为也该如何重现此行为?