这不是一个全新的问题,但我现在一直在寻找一段时间,而且我找不到解决方案。
我正在为我的角应用程序使用一个名为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的丰富经验。很想得到关于这个问题的一些反馈。当需要对包的源代码进行修改时,似乎它可能是一个常见的问题?也许有更好的解决方案?在此先感谢您的帮助。
答案 0 :(得分:101)
尝试npm install <ghusername>/<repoName>
,其中<ghUsername>
是您的GitHub用户名(不含@
),<repoName>
是存储库的名称。这应该正确安装它。您很可能希望在安装命令中使用--save
或--save-dev
标志来保存package.json
中的依赖关系。
如果该功能无法正常运行,请检查.npmignore
文件的内容。
编辑:
您的问题是,在您的情况下,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
,则一切就绪。
答案 3 :(得分:2)
为了搭载@ RyanZim的优秀答案,postinstall
绝对是一个有效的选择。
要么执行以下操作之一:
如果您已经分叉了另一个人员存储库,那么可能值得提出一个问题来说明通过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
是存储库的名称