npm安装和构建分叉github repo

npm安装和构建分叉github repo,github,npm,npm-install,git-fork,npm-publish,Github,Npm,Npm Install,Git Fork,Npm Publish,这不是一个全新的问题,但我已经四处寻找了很长一段时间,我很难找到解决方案 我正在为我的angular应用程序使用一个名为angular translate的模块。然而,我不得不对源代码进行一些小的修改,以使所有内容都按我所希望的方式工作,现在我想在npm安装上保留这些更改。一位同事建议我将源代码的repo分叉,并将分叉后的repo作为依赖项,我已经用以下方式尝试过,例如 npm install https://github.com/myRepo/angular-translate npm ins

这不是一个全新的问题,但我已经四处寻找了很长一段时间,我很难找到解决方案

我正在为我的angular应用程序使用一个名为angular translate的模块。然而,我不得不对源代码进行一些小的修改,以使所有内容都按我所希望的方式工作,现在我想在
npm安装
上保留这些更改。一位同事建议我将源代码的repo分叉,并将分叉后的repo作为依赖项,我已经用以下方式尝试过,例如

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz
第一个给了我一个这样的目录,没有构建。只有一个package.json、.npmignore和一些标记文件

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc
第二次
npm安装
为我提供了完整的repo,但是我没有得到像使用命令
npm install angular translate
时那样的构建。我看过一些关于运行预发布脚本的讨论,但我不确定在安装所有模块时如何执行。我也尝试过将fork作为我自己的模块发布到npm注册表,但是我还是没有得到构建,我不确定这样做是否正确

我为我对这个话题的无知道歉。我对npm没有太多的经验。我很想得到一些关于这个问题的反馈。当需要修改包的源代码时,这似乎是一个很常见的问题?也许有更好的解决办法?提前感谢您的帮助。

请尝试
npm安装/
,其中
是您的GitHub用户名(不带
@
),而
是存储库的名称。应该正确安装它。您很可能希望在install命令中使用
--save
--save dev
标志来保存
包.json中的依赖项

如果工作不正常,请检查
.npmignore
文件的内容

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


编辑:

您的问题是,在您的情况下,
dist/
没有提交到回购(因为它位于
.gitignore
中)。这就是实际代码所在的位置
dist/
是在包发布到npm注册表之前从
src/
中的文件生成的,但是
dist/
从未提交到repo

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

npm run build
git add .
git commit
git push
(确保您已首先运行了
npm安装

然后,您应该能够从github安装


也许有另一种方法可以使用
prepare
脚本来实现这一点,但我不确定这是否可行;我从来没有试过编辑:Cameron Tacklind写了一个非常好的答案,详细说明了如何做到这一点:

为了借鉴@RyanZim的优秀答案,
postinstall
无疑是一个有效的选择

执行以下任一操作:

  • 更新forked repo中的package.json,以向脚本添加postinstall元素。在这里,运行您需要的任何东西来获得编译输出(首选)
  • 更新package.json,并添加一个postinstall,用于更新节点_模块中的必要目录

  • 如果您已经创建了另一个人存储库,那么可能需要提出一个问题来说明通过GitHub安装他们的包不起作用,因为它没有提供构建脚本的必要方法。从那里,他们可以接受PR,通过postinstall解决此问题,也可以拒绝PR,您可以对使用npm 5的用户执行#2。

    更新:

    截至npm@5,
    预发布
    脚本已弃用

    对于构建步骤使用
    prepare
    ,对于上传仅使用
    prepublishOnly


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

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

    TL;DR使用
    准备
    脚本
    别忘了
    package.json#文件
    .npmignore
    发布到npmjs.com的代码通常不是包的存储库中的代码。将JavaScript源文件“编译”成供库中一般使用的版本是很常见的。这是通常发布到npmjs.com的内容

    发布前自动运行“构建”步骤是
    npm
    的一个常见功能(
    npm publish
    )。这最初被称为
    prepublish
    。似乎Npm认为在
    Npm安装上运行
    prepublish
    脚本也很方便,因为这是初始化开发环境的标准方法

    这最终导致了社区中的一些重大混乱。关于这一点,Github上有很多问题

    最后,为了不改变旧的行为,他们决定再添加两个自动脚本:
    prepublishOnly
    prepare

    仅预发布
    实现您的期望。它不会在npm安装上运行。许多软件包维护人员只是盲目地转向了这一点

    但也有一个问题,人们不想依赖npmjs.com来分发软件包的版本。Git存储库是自然的选择。然而,通常的做法是不将“编译”文件提交到git。这就是添加到处理中的
    prepare


    prepare
    是正确的方法 如果您有一个包含源文件的存储库,但使用它需要“构建”步骤,
    prepare
    在所有情况下都能完全满足您的要求(从npm 4开始)

    prepare
    :在打包和发布包之前,在本地
    npm安装上运行,不带任何参数,并且在安装时运行