【问题标题】:is there a way to reduce the commands to execute a node application installed from npm有没有办法减少执行从 npm 安装的节点应用程序的命令
【发布时间】:2019-05-25 05:31:07
【问题描述】:

我做了一个小的 npm 包并部署它,基本上它是一个内置在 node 中的 CLI 工具,我正在尝试减少执行它所需的命令

到目前为止,要使用 CLI,我遵循以下步骤: -> npm install my_package(显然) -> cd node_modules/my_package -> node index.js

运行 node node_modules/my_package/index.js 不会给出预期的结果,因为我使用 PropertyReader.properties 文件中读取,并且如果我不从包含此文件的文件夹,我最终得到一个错误 '没有这样的文件或目录'

这是包的结构

/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,欢迎任何可以提供帮助的建议或想法

谢谢

【问题讨论】:

    标签: node.js npm cmd package


    【解决方案1】:

    我通过依赖 __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 时,默认情况下它可以工作(npm install -g my_package )(我只是在 CMD 中运行 my_package 就可以了!)

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

    【讨论】:

      【解决方案2】:

      注意:此答案假设您使用的是 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')) 其中__dirname 表示目录您的 CLI 所在的位置。

      所以假设:

      ./
        index.js
        package.json
        bin/
          cli
        config/
          my.properties
      

      ./bin/cli,你会:

      const path=require('path')
      const PropertiesReader = require('properties-reader')
      const properties_file_path = path.resolve(__dirname, '../config/my.properties')
      const properties = PropertiesReader(properties_file_path)
      

      【讨论】:

      • 实际上我使用的是windows机器,我正在尝试找到一种方法来相对于index.js而不是我执行节点的位置来定位属性文件,我的想法是获取index.js 的绝对路径(例如: C:/data/files/index.js ,那么我确定我的属性文件的路径是 C:/fata/files/my.properties )我不知道如何做吧
      猜你喜欢
      • 2023-04-01
      • 2021-08-30
      • 2021-09-24
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多