如何从需要构建步骤的 github 安装 npm 包,例如分叉图书馆时?

Posted

技术标签:

【中文标题】如何从需要构建步骤的 github 安装 npm 包,例如分叉图书馆时?【英文标题】:How to install a npm package from github requiring a build step, e.g. when forking a library? 【发布时间】:2021-10-25 18:18:31 【问题描述】:

假设您使用像 vue3-datepicker 这样的库。你意识到你需要自定义一些东西,作为第一步,你想使用它的自定义分支。

问题是,当包被推送到 npm 的注册表时有一个构建步骤,因为该项目不使用纯 javascript,但可能有 vue 或 typescript 文件。

在这种情况下,应该是npm run build:component,但这取决于项目。

只需通过以下方式从 github 安装 fork:

yarn add <GitHub user name>/<GitHub repository name>#<branch/commit/tag>

因此还不够,因为 ./dist 文件夹不存在。

你会遇到非常奇怪的错误,例如:

error: [plugin: vite:dep-scan] Failed to resolve entry for package "vue3-datepicker". The package may have incorrect main/module/exports specified in its package.json: Failed to resolve entry for package "vue3-datepicker". The package may have incorrect main/module/exports specified in its package.json.

As a quick and dirty solution,我从.gitignore 的fork 中删除了./dist/ 文件夹,在我的fork 中运行npm i &amp;&amp; npm run build:component,然后推送它。

巨大的缺点是,./dist/ 文件夹现在是该存储库的一部分,在我的 fork 中的每次更改之后,我还必须再次构建文件并推送这些文件。

我宁愿在我的应用程序中触发构建过程使用我的fork。我的申请有没有办法说:

当您安装该库时,您必须在下载所有文件后运行某个脚本?

该解决方案应该对npmyarn 都可用,因为可以在不同的应用程序中安装fork。

【问题讨论】:

【参考方案1】:

来自npm-installDocs 的引用

如果正在安装的包包含prepare 脚本,则在打包和安装包之前,将安装它的dependenciesdevDependencies,并运行准备脚本。

所以在你的 fork 的 package.json 中你可以添加

"scripts": 
    // ...
    "build:component": "rollup -c build/rollup.config.js",
    "prepare": "yarn build:component || npm run build:component"

【讨论】:

我不喜欢它成为分支的一部分,以防万一有人想从分支创建 PR。 (虽然它比提交整个 dist 文件夹要好) @k0pernikus,同意,但您可以创建“可安装”分支,仅在更改之上添加该脚本【参考方案2】:

如果您想在安装后触发构建,您可以在您的package.json 中使用postinstallbuild 脚本。在此脚本中,您可以使用 shell 命令或 javascript 程序创建目录并进行其他设置:


  "scripts": 
    "build": "mkdir dist && npm run build:component",
    "build:component": "some command"
  

【讨论】:

以上是关于如何从需要构建步骤的 github 安装 npm 包,例如分叉图书馆时?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 npm 从 GitHub url 安装 typescript 依赖项?

使用 GitHub Actions 从私有 GitHub 存储库安装 npm 模块

无法使用 npm 从分叉的 github 存储库安装

如何从 GitHub 为 Meteor 安装 NPM 包?

如何将“npm install”拆分为两个步骤来执行离线构建?

使用npm直接从github repo安装加载模块