【问题标题】:How do I use an individual github file as a dependency in my package.json?如何在 package.json 中使用单个 github 文件作为依赖项?
【发布时间】:2017-02-06 16:52:14
【问题描述】:

我有一个旧项目使用这个project 它基本上只是一个 JS 文件。我尝试了几种添加方式...

"jquery-highlight-regex": "jbr/jQuery.highlightRegex"

npm ERR! eisdir EISDIR: illegal operation on a directory, read
npm ERR! eisdir This is most likely not a problem with npm itself
npm ERR! eisdir and is related to npm not being able to find a package.json in
npm ERR! eisdir a package you are trying to install.

"jquery-highlight-regex": "https://raw.githubusercontent.com/jbr/jQuery.highlightRegex/master/highlightRegex.js"
npm ERR! not a package /var/folders/vf/mnj9dq116gvcww95cbk3r3n40000gp/T/npm-32798-d819bc7b/raw.githubusercontent.com/jbr/jQuery.highlightRegex/master/highlightRegex.js
npm ERR! Darwin 16.0.0
npm ERR! argv "/Users/.../bin/node" "/Users/.../apps/node/bin/npm" "install"

那么如何在没有 package.json 的情况下包含一个简单的 JS 文件作为依赖项呢?

【问题讨论】:

  • 更一般地说,当 NPM 上没有可用的包但我希望能够下载单文件 JS 依赖项作为 npm install 的一部分而不是将其提交到我的存储库时,我该如何这样做?
  • postInstall 或类似的钩子会以某种方式下载附加文件吗?

标签: npm


【解决方案1】:

正如您已经发现的那样,您无法在 package.json 中通过 URL 引用远程文件,但您确实有一些选择:

  1. 将文件作为公共或私有包提交到 npm,然后将其作为正常依赖项包含在内。
  2. 动态获取文件,然后按照in this thread 的建议运行它(对于不会更改的文件,这似乎是一个非常糟糕的选择)。
  3. 只需复制文件并将其包含在本地(不知道为什么不这样做,因为它似乎在 4 年多的时间里没有改变)。

【讨论】:

  • 选项 1 对我来说可能是一种可能性,我会进行调查。出于多种原因,选项 2 是一个坏主意。选项 3 可能适用于原始问题作者,但不适用于我 - 我的库会定期更新。
【解决方案2】:

您可以使用安装后脚本以及诸如download-cli 之类的依赖项来手动拉取文件。如果文件经常更改,这可能很有用,例如 mjaggard 的情况。

以下示例package.json 将在安装时获取文件并将其放置在/third-party 文件夹中。

{
  "name": "so-npm-download-on-install",
  "version": "1.0.0",
  "scripts": {
    "postinstall": "download --out third-party https://raw.githubusercontent.com/jbr/jQuery.highlightRegex/master/highlightRegex.js"
  },
  "dependencies": {
    "download-cli": "^1.1.1"
  }
}

Clone this example repo to try it out.

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2021-11-24
    • 2020-02-25
    • 1970-01-01
    • 2014-10-16
    • 2023-02-23
    • 2017-07-05
    • 2019-05-27
    • 2012-01-31
    相关资源
    最近更新 更多