软件包作为 NPM 注册表的依赖项安装正常,但不是来自 GitHub URL?

Package installs fine as dependency from NPM registry but not from GitHub URL?

PREFACE:当我从 NPM 注册表将其作为软件包安装时,我从 派生的存储库 可以通过 NPM 安装。我目前的猜测是,从注册表安装包时目录的设置方式与直接从 GitHub URL 中的 [ 安装不同。 =74=] 文件,这导致 require() 语句试图找到 babel-register 模块prepack 脚本执行期间失败。 如果有人能给我指出一份文档,该文档清楚地解释了从 NPM 注册表安装软件包时 NPM 所采取的步骤,它可能会帮助我解决这个问题。

我有一个 GitHub 我分叉的回购协议:

 https://github.com/roschler/zos-cli

我正在尝试将包作为依赖项安装在我的 Node.JS 包中,使用我认为引用 GitHub 存储库和分支的正确格式,如下面的 package.json 文件:

{
    "name": "basil",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "build": "webpack --mode production"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "dependencies": {
      "openzeppelin-zos": "^1.9.1"
    },
    "devDependencies": {
      "ajv": "^6.5.1",
      "babel-core": "^6.26.3",
      "babel-loader": "^7.1.4",
      "babel-preset-env": "^1.7.0",
      "babel-preset-react": "^6.24.1",
      "babel-register": "^6.26.0",
      "webpack": "^4.12.0",
      "webpack-cli": "^3.0.3",
      "zos": "roschler/zos-cli.git#development"
    }
}

但是,当我在进行更改后执行 npm install 时,我得到以下错误输出:

$  npm install

> zos@1.0.0 prepack /home/robert/.npm/_cacache/tmp/git-clone-d4bae66a
> truffle compile && rm -rf lib && babel src --out-dir lib

Error: Cannot find module 'babel-register'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
    at Function.Module._load (internal/modules/cjs/loader.js:520:25)
    at Module.require (internal/modules/cjs/loader.js:650:17)
    at require (internal/modules/cjs/helpers.js:20:18)
    at Object.<anonymous> (/home/robert/.npm/_cacache/tmp/git-clone-d4bae66a/truffle.js:1:63)
    at Module._compile (internal/modules/cjs/loader.js:702:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
    at Module.load (internal/modules/cjs/loader.js:612:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
    at Function.Module._load (internal/modules/cjs/loader.js:543:3)

我仔细检查了一下,必要的 babel 元素在我项目的 node_modules 子目录中:

$ find . -regex .*?babel-register
./node_modules/babel-register

然后我尝试在全局安装 Babel 命令行版本,如果您查看我的 package.json 文件,我尝试将 Node API 版本安装到我的项目,根据他们的文档:

https://babeljs.io/blog/2015/10/31/setting-up-babel-6

$ npm install --global babel-cli
$ npm install --save-dev babel-core

而且我仍然得到完全相同的错误输出。为什么它仍然抱怨无法找到 babel-register 我该如何解决这个问题?

更新:我尝试了如下所示的完整全局安装,但我仍然有完全相同的错误:

npm install -g ajv
npm install -g webpack
npm install -g webpack-cli
npm install -g babel-loader babel-core babel-preset-env babel-preset-react babel-register

# Created a .babelrc file in my project directory with this content:
{
  "presets": [
    ["env", {
      "targets": {
        "node": "8.9"
      }
    }],
    "react"
  ],
  "plugins": ["transform-object-rest-spread"]
}

更新 2:在 Babel 寄存器上找到此页面:

https://new.babeljs.io/docs/en/next/babel-register.html

尝试了建议的 npm 安装:

npm install @babel/core @babel/register --save-dev

仍然没有运气。

发生的事情是 zos-cli 有一个 prepack 脚本需要安装包的 devDependencies。 prepack 在安装 git 依赖项 (https://docs.npmjs.com/misc/scripts), however the devDependencies only get installed when a package is the root package (https://docs.npmjs.com/files/package.json#devdependencies) 时获得 运行。因此,您实际上是在尝试在没有构建工具的情况下构建 zos-cli。

简单地说,按原样安装此模块作为 git 依赖项将不起作用。

一些可能的解决方案:

  1. (首选)实际发布模块并使用它(您可以在自己的 NPM 名称空间下分叉和发布,许可证允许)
  2. 在 github 上分叉项目并设置一个分支,其中您已经 运行 npm i; npm run prepack; 然后从 package.json 中删除 prepack