Node.js 包可以作为依赖项从NPM注册表安装,但不能从GitHub URL安装?

Node.js 包可以作为依赖项从NPM注册表安装,但不能从GitHub URL安装?,node.js,github,babeljs,package.json,truffle,Node.js,Github,Babeljs,Package.json,Truffle,前言:当我从NPM注册表将其作为包安装时,我从中派生的存储库确实可以通过NPM很好地安装。我目前的猜测是,当从注册表安装包时,目录的设置方式与直接从package.json文件中的GitHub URL安装时有所不同,这导致尝试在预打包脚本执行期间查找babel register模块的require语句失败。如果有人能给我一个文档,清楚地解释NPM在从NPM注册表安装包时所采取的步骤,它可能会帮助我解决这个问题 我有一份GitHub回购协议,我已经完成了: https://github.com/

前言:当我从NPM注册表将其作为包安装时,我从中派生的存储库确实可以通过NPM很好地安装。我目前的猜测是,当从注册表安装包时,目录的设置方式与直接从package.json文件中的GitHub URL安装时有所不同,这导致尝试在预打包脚本执行期间查找babel register模块的require语句失败。如果有人能给我一个文档,清楚地解释NPM在从NPM注册表安装包时所采取的步骤,它可能会帮助我解决这个问题

我有一份GitHub回购协议,我已经完成了:

 https://github.com/roschler/zos-cli
我正在尝试将包作为依赖项安装到Node.JS包中,使用我认为是引用GitHub repo和branch的正确格式,如我的package.json文件中所示:

但是,在进行更改后执行npm安装时,会得到以下错误输出:

$  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命令行版本,如果您查看我的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有一个需要安装包的devdependency的预包脚本。安装git依赖项时会运行prepack,但是只有当包是根包时才会安装devdependency。因此,您实际上是在尝试在没有构建工具的情况下构建zos cli

简单地说,以git依赖项的形式安装这个模块是行不通的

一些可能的解决办法:

如果许可证允许,最好实际发布模块并使用您可以在自己的NPM命名空间下分叉和发布的模块 在github上分叉项目,并在其中设置一个分支,您已经运行了npm i;npm运行预打包;然后从package.json中删除prepack。
还有一些奇怪的事情在发生。我执行了选项2,edited.gitignore,以便在删除预打包脚本的同时推送节点_模块和lib dir。但在随后的npm安装过程中,我遇到了一个奇怪的错误,表明babel register仍然不满意。请注意此无效路径:“/home/robert/Documents/GitHub/ME/zeppelin os work/basil.babel register error/node_modules/zos/lib/bin/zos cli.js”,导致安装失败。考虑到注册表版本可以正常工作,NPM在注册表安装方面还有什么不同之处吗?我进一步挖掘了一下,实际上zos cli正在尝试在运行时使用babel register查看truffle.js中的require,它可以通过src/models/truffle/truffle.js动态加载。这在生产中通常是不鼓励的,但简单的解决方法是将babel register从devDependencies移动到运行时使用的正常依赖项,因此它严格来说不是开发/构建依赖项。另外,顺便说一句,您不需要也不应该在repo中包含node_模块。重要的一点是完成构建步骤,而不是那里的依赖项..作为一个PoC,我用它作为zos的git参考进行安装时没有错误:gpittarelli/zos-cli.gitgjp-built在您最后的评论中,您是说您的fork是源repo的未修改副本,您可以安装它吗,或者在您在紧接着上面的评论中做出了建议的更改之后,您在评论中谈到了zos cli在运行时使用babel register?另外,您是从开放齐柏林飞艇的原始repo(我是从中创建的)中创建分支,还是从我的repo分支中创建分支?区别在于,从注册表安装时不会运行prepack,因为预期代码在打包并发布到注册表之前已完全构建
https://new.babeljs.io/docs/en/next/babel-register.html
npm install @babel/core @babel/register --save-dev