npm安装和构建分叉github repo
这不是一个全新的问题,但我已经四处寻找了很长一段时间,我很难找到解决方案 我正在为我的angular应用程序使用一个名为angular translate的模块。然而,我不得不对源代码进行一些小的修改,以使所有内容都按我所希望的方式工作,现在我想在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
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安装上运行,不带任何参数,并且在安装时运行