【问题标题】:Node command-line application global include file节点命令行应用程序全局包含文件
【发布时间】:2021-11-02 11:12:13
【问题描述】:

我正在尝试在 Node.js 中创建一个命令行应用程序

我有以下文件夹结构(可能不正确)

现在我的用户将使用 npm install -g 在全局范围内安装它,因此它可以在任何项目中使用。

在我的代码 (index.js) 中,我有以下行:

fs.readFile('./helpers/tailwind.css', (err,css)=>{
    
})

问题是当我的用户运行它时,它无法找到该文件,因为它试图在用户使用命令行应用程序的目录中找到该文件。

那么如何从命令行应用程序文件夹/文件中读取?

【问题讨论】:

  • __dirname 可能会有所帮助...类似于path.join(__dirname, './helpers/tailwind.css')

标签: javascript node.js fs


【解决方案1】:

无法从全局安装的包中加载文件(也就是使用requireimportaccording to the docs -(以及per this answer)因此您的用户需要在每个回购的基础上安装您的包.

话虽如此,您may be able to accomplish this via OS env vars,但随后您遇到了不同的问题。比如你如何为 Windows 上的用户和 *nix 上的用户设置这些环境变量?

在您的 package.json 文件中,您可以添加 "bin" 属性,以便安装您的软件包的任何人都可以通过执行 "./node_modules/bin/helpers" 访问这些文件。 See here for more info

如果您不关心走"bin" 路线(或者如果它不适用),那么您可以随时让您的用户执行"./node_modules/<your_package_name>/<some_dir>/<some.file>" 之类的操作(替换路径中必要的名称).. 你 也可以使用 "<your_package_name>/<some_dir>/<some.file>" 之类的东西,但同样,这不能使用全局包。

【讨论】:

  • 上面的注释使用了路径。加入全局安装包会不会起作用?
  • 问题不在于您使用的路径。而是包位于最终用户机器上的位置。使用 path.join 不会改变任何东西。
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多