npm安装和构建forked github repo

时间:2016-11-10 12:49:34

标签: github npm npm-install git-fork npm-publish

这不是一个全新的问题,但我现在一直在寻找一段时间,而且我找不到解决方案。

我正在为我的角应用程序使用一个名为angular-translate的模块。但是,我必须对源代码进行一些小的修改才能让所有内容按照我喜欢的方式运行,现在我想在npm install上保留这些更改。一位同事建议我分发源代码的回购并指向我的分支回购作为依赖,我已经用这些方式尝试过,例如。

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

第一个给我一个这样的目录,没有构建。只是一个package.json,.npmignore和一些markdown文件

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

第二个npm install给了我完整的回购,但是我再也没有像使用命令npm install angular-translate那样获得构建。我已经看到了运行预发布脚本的一些讨论,但我不确定在安装所有模块时如何执行此操作。我也尝试将fork作为我自己的模块发布到npm注册表中,但我再次没有构建,我不确定这是正确的做法......

我为我对这个话题的无知道歉。我没有npm的丰富经验。很想得到关于这个问题的一些反馈。当需要对包的源代码进行修改时,似乎它可能是一个常见的问题?也许有更好的解决方案?在此先感谢您的帮助。

6 个答案:

答案 0 :(得分:101)

尝试npm install <ghusername>/<repoName>,其中<ghUsername>是您的GitHub用户名(不含@),<repoName>是存储库的名称。这应该正确安装它。您很可能希望在安装命令中使用--save--save-dev标志来保存package.json中的依赖关系。

如果该功能无法正常运行,请检查.npmignore文件的内容。

如果安装命令需要很长时间,请不要惊慌失措;从git存储库安装比从npm注册表安装要慢。

编辑:

您的问题是,在您的情况下,dist/未提交回购(因为它位于.gitignore)。这就是实际代码的存在。在将包发布到npm注册表之前,dist/中的文件是根据src/中的文件构建的,但dist/永远不会提交到存储库。

这很难看,但在这种情况下,您必须从dist/中移除.gitignore,然后运行:

npm run build
git add .
git commit
git push

(确保您先运行npm install

然后你应该可以从github安装。

使用postinstall脚本可能有另一种方法可以做到这一点,但我不确定这是否可行;我从未尝试过。

答案 1 :(得分:4)

使用npm 5的人更新:

  

从npm @ 5开始,不推荐使用prepublish个脚本。

     

使用prepare进行构建步骤,使用prepublishOnly进行仅上传。

我发现在脚本中添加"prepare": "npm run build"修复了我的所有问题。

答案 2 :(得分:3)

prepare是正确的方法

如果您的存储库中包含源文件,但使用它必须要执行“构建”步骤,则在所有情况下(截至npm 4),向该“包”中添加prepare脚本都将完全符合您的要求。

  

prepare:在打包和发布该软件包之前,在没有任何参数的本地npm install上,以及在安装git依赖项时都运行。

您甚至可以将构建依赖项放入devDependencies中,它们将在执行prepare之前安装。

这里是an example个使用此方法的我的软件包。


.gitignore的问题

此选项有一个吸引很多人的问题。 准备依赖项时,Npm和Yarn将保留在files的{​​{1}}部分列出的文件。

可能会看到files defaults to all files being included并认为已完成。 容易遗漏的是package.json 主要是覆盖.npmignore指令,如果files不存在,则{{1} }代替。

因此,如果您的构建文件像理智的人一样在.npmignore中列出,请不要在.gitignore中列出您的构建文件,也不要使用.gitignore文件, files似乎损坏

如果您将.npmignore修复为仅包含已构建的文件或添加空的prepare,则一切就绪。


原始答案:https://stackoverflow.com/a/57503862/4612476

答案 3 :(得分:2)

为了搭载@ RyanZim的优秀答案,postinstall绝对是一个有效的选择。

要么执行以下操作之一:

  1. 更新forked repo中的package.json,将postinstall元素添加到脚本中。在这里,运行你需要的任何东西来获得编译输出(首选)。
  2. 更新您的package.json,并添加一个postinstall,用于更新node_modules中的必要目录。
  3. 如果您已经分叉了另一个人员存储库,那么可能值得提出一个问题来说明通过GitHub安装他们的软件包不起作用的问题,因为它没有提供构建脚本的必要方法。从那里,他们可以接受PR以通过postinstall解决此问题,或者他们可以拒绝它,你可以做#2。

答案 4 :(得分:1)

只需使用命令npm install git+https://git@github.com/myRepo/angular-translate.git。谢谢。

答案 5 :(得分:0)

如果您像我一样使用yarn。假设您要使用this之类的软件包: yarn add ghasemikasra39/gridfs-easy --save,其中ghasemikasra39是用户名,gridfs-easy是存储库的名称