请考虑以下情形:
package.json
文件具有一个构建脚本和一个发布脚本,该构建脚本根据TypeScript代码创建JavaScript文件,然后将发布的JS文件放置在npm上。package.json
文件中)更改为fork的GitHub URL,然后执行{ {1}}。这不起作用,因为:
npm install
字段中列出打字稿文件,仅列出了自动生成的JS文件,因此在npm安装期间不会提取TypeScript文件。我该如何解决?有没有一种方法可以修改dist
的行为,以便它可以提取回购中npm install
中没有的文件,然后在安装过程中运行构建脚本?
答案 0 :(得分:1)
prepack
脚本的docs建议在从git repo安装依赖项后运行该脚本。尝试在git依赖项的package.json
中放入以下内容:
{
"scripts": {
"prepack": "call the build script"
}
}
这应该在您npm install
之后构建软件包,这听起来像您想要做的。我不确定除此之外是否还有其他问题。
答案 1 :(得分:0)
我有同样的问题。看到了很多有关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
(或与npm install someuser/package-to-import#master
相同)
如果您使用此存储库的分支,则可以通过在package.json
中添加到package-to-import
回购此部分来简化工作:
"scripts": {
...,
"postinstall": "tsc --outDir ./build"
}
现在,它可以与yarn add/upgrade
一起使用,而无需使用额外的脚本。
另外,您也可以半手动完成操作,即在主存储库package.json
"scripts": {
...,
"upgrade-package-to-import": "yarn upgrade package-to-import && cd node_modules/package-to-import && yarn build"
}
有另一种方法可以将存储库克隆到另一个文件夹中,构建文件并将其链接。
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
如果使用毛线,最后两行将是:
yarn build
yarn link
然后,输入项目的文件夹并编写
npm link package-to-import
或在纱线情况下
yarn link package-to-import
这些是符号链接,因此当您从存储库中提取并构建文件时,将使用更新的版本。
另请参阅:
一种完全不同的方法。 对于使用git子模块的混合建议:
答案 2 :(得分:0)
我遇到了与您完全相同的问题。真的,令我惊讶的是,我能够用Google搜索您的StackOverflow问题,因为这很难描述。
简而言之,为了支持Gradle Plugin 6.0.0,我不得不派生react-native-webview
库来更新kotlinVersion
。
如您所见here,我对它进行了很好的修改,并对该版本进行了改进。
然后我将这个特定的fork和branch添加到我的package.json
文件中:
"react-native-webview": "github:cntral/react-native-webview#5_8_2"
此后我会做npm install
,会得到error Command "tsc" not found.
经过大量挖掘之后,该库的"prepack": "yarn build"
中有一个package.json
脚本,只要将其作为git依赖项包含在内,它将尝试运行。但是我们没有使用TypeScript,因此它尝试运行yarn build
,而yarn tsc
却无法运行tsc
。
好的,所以我尝试将typescript
作为devDependency
添加到我的package.json
中,看看是否可以解决。没有。我尝试使用yarn install
而不是npm install
来查看是否可以解决该问题。它将安装得很好,但是如果您查看node_modules/react-native-webview
目录,则应该存在于lib/
中的转换后的JavaScript文件不存在。所以那行不通。
然后我想,如果所有这些都想将TypeScript文件转换为普通的JavaScript,以便我们的应用可以使用它,为什么不在我们的fork中这样做并提交那些.js
文件。所以我做了。
我在yarn build
的分支中运行react-native-webview
,从lib/
中删除了.gitignore
目录,然后提交了这些更改,如您所见here。
然后,我还必须从分叉的"prepack": "yarn build"
中删除package.json
,以便它不会尝试构建库并再次运行tsc
,这是{{3 }}。
此后,我们的应用程序就可以正常使用它,就像我们从npm或GitHub上使用的任何其他库一样。
希望对别人有帮助。