如何让npm从GitHub网址安装打字稿依赖?

Jac*_*lyk 12 github npm typescript npm-install

请考虑以下情形:

  • 有一个代码库.该库是用TypeScript编写的,打字稿代码是在GitHub中发布的.该package.json文件有一个构建脚本,它根据TypeScript代码和一个发布脚本创建JavaScript文件,然后将生成的JS文件放在npm上.
  • 我创建了一个GitHub仓库的分支,对typescript文件进行了一些修改,并将这些更改推送到GitHub.(我还打开原始GitHub仓库的PR,但是在这些变化合并之前有一段时间.)
  • 我希望在下游的NPM包中使用这些代码更改,因此在下游包中我将引用(在下游的package.json文件中)更改为修改的包到我的fork的GitHub URL并执行npm install.

这不起作用,因为:

  • 修改后的软件包的package.json文件没有列出dist字段中的typescript文件,只列出自动生成的JS文件,因此在npm安装期间不会提取TypeScript文件.
  • 编译的JS文件不存在,因为它们未签入GitHub.

我怎么解决这个问题?有没有一种方法可以修改行为,npm install以便它在不存在的repo中获取文件dist,然后在安装期间运行构建脚本?

Pio*_*dal 10

我有同样的问题。看到很多关于 monorepos 的文章(下面的链接),但没有太多关于如何将 TypeScript 项目拆分为单独的存储库。

简而言之,您需要一步一步地构建 JS 文件。

有关工作代码示例,请参阅https://github.com/stared/yarn-adding-pure-typescript-package-example

所以,有几个解决方案。假设存储库是someuser/package-to-import

安装后

使用yarn,您可以直接从GitHub存储库中获取项目:

yarn add someuser/package-to-import#master
Run Code Online (Sandbox Code Playgroud)

(或与 相同npm install someuser/package-to-import#master

如果你在这个存储库的一个分支上工作,你可以通过package.jsonpackage-to-importrepo 中添加这部分来让你的生活更轻松:

  "scripts": {
    ...,
    "postinstall": "tsc --outDir ./build"
  }
Run Code Online (Sandbox Code Playgroud)

现在它yarn add/upgrade无需额外脚本即可使用。或者,您可以半手动完成,即在您的主存储库中创建一个脚本package.json

  "scripts": {
    ...,
    "upgrade-package-to-import": "yarn upgrade package-to-import && cd node_modules/package-to-import && yarn build"
  }
Run Code Online (Sandbox Code Playgroud)

关联

有一种不同的方法可以将存储库克隆到不同的文件夹、构建文件并链接它。

git clone git@github.com:someuser/package-to-import.git
cd package-to-import
npm run build  # or any other instruction to build
npm link
Run Code Online (Sandbox Code Playgroud)

如果您使用纱线,最后两行将是:

yarn build
yarn link
Run Code Online (Sandbox Code Playgroud)

然后,进入你的项目所在的文件夹并写入

npm link package-to-import
Run Code Online (Sandbox Code Playgroud)

或者在纱线的情况下

yarn link package-to-import
Run Code Online (Sandbox Code Playgroud)

这些是符号链接,因此当您从 repo 中提取并构建文件时,您将使用更新的版本。

也可以看看:

单一仓库

一种完全不同的方法。对于使用 git 子模块的混合建议:


Nic*_*las 7

文档prepack脚本提示的依赖从git仓库安装后,它开始运行。尝试将这样的东西放在package.jsongit 依赖项中:

{
  "scripts": {
    "prepack": "call the build script"
  }
}
Run Code Online (Sandbox Code Playgroud)

这应该在你之后构建包npm install,这听起来像你想要做的。我不确定您是否还有其他问题。

  • 看起来“准备”也有效。-- https://docs.npmjs.com/misc/scripts (2认同)