我们与客户端和服务器共享一个 yarn JS 文件夹,
We share a yarn JS folder w/ client & server,
情况:
- 客户端和服务器共享一个文件夹
shared
- 当我们在开发流程中更改 shared 时,我们希望在客户和服务器中更改相应的引用
- 服务器可以工作,因为
npm
它似乎可以工作,共享和服务器使用 npm
- 客户不工作并使用 yarn
- 混合打字稿和 js 项目
代码结构:
root/
|- client/
|- package.json
|- src/
|- ...
|- server/
|- package.json
|- src/
|- ...
|- shared/
|- package.json // we don't want to change version every change
|- src/
|- ...
尝试了什么
提出了3个解决方案here
-
create a folder common under root and just require the files you need from your files. But you could end up with "long" require such as require("../../../../../common/file")
long require 不适用于 webpack 的解决方案——这不是一个好的解决方案
-
use module-alias to avoid that problem: https://github.com/ilearnio/module-alias
module-alias 似乎 与下一个解决方案的行为相同。
-
you could make common a local module (using file:) and install it in package.json https://docs.npmjs.com/files/package.json#local-paths
我们目前这样做,但我们仍然需要重新安装 shared
文件夹,我们目前使用 yarn upgrade shared
这需要很长时间并且仍然需要我们知道我们什么时候需要 运行 它。
此外,我们已尝试让 yarn link
正常工作,但似乎link 无法正常工作
我们尝试使用 post-pull
钩子 husky
到 运行 yarn upgrade shared
但它太慢 运行每次拉动,尤其是因为它并不经常需要
我们已经考虑过像 Lerna 这样的真正的单一存储库 'package',但仍然认为没有必要迁移成本
link-module-alias to sym link folders on post install script, but this fails with typescript files
目标
- 要么
- 找到一种在
dev
环境中自动同步这些内容的方法
- 找到一个手动 installs/updates 的解决方案 - 但速度很快,并且可以 运行 每次拉动
- 找到一种方法 运行 使
yarn upgrade shared
运行(大致)仅在需要时自动化
- 我想我们可以找到一种方法来在
shared
的 version
密钥发生任何变化时自动增加版本,然后跟踪它,我们可以 运行 yarn install
并且该工作有效。
找到的解决方案是我们使用的是 React-Native,因此正常的同步步骤适用于 IDE 但不适用于 React-Native 应用程序。
Here 是一篇很棒的文章,描述了如何让 metro bundler 使用它——但是对于 Typescript,我们将它添加到 TSConfig 中,对于 IDE,我们仍然需要将它添加到我们的包中使用 file:../shared
指令。
情况:
- 客户端和服务器共享一个文件夹
shared
- 当我们在开发流程中更改 shared 时,我们希望在客户和服务器中更改相应的引用
- 服务器可以工作,因为
npm
它似乎可以工作,共享和服务器使用npm
- 客户不工作并使用 yarn
- 混合打字稿和 js 项目
代码结构:
root/
|- client/
|- package.json
|- src/
|- ...
|- server/
|- package.json
|- src/
|- ...
|- shared/
|- package.json // we don't want to change version every change
|- src/
|- ...
尝试了什么
提出了3个解决方案here
-
create a folder common under root and just require the files you need from your files. But you could end up with "long" require such as require("../../../../../common/file")
long require 不适用于 webpack 的解决方案——这不是一个好的解决方案
-
use module-alias to avoid that problem: https://github.com/ilearnio/module-alias
module-alias 似乎 与下一个解决方案的行为相同。
-
you could make common a local module (using file:) and install it in package.json https://docs.npmjs.com/files/package.json#local-paths
我们目前这样做,但我们仍然需要重新安装
shared
文件夹,我们目前使用yarn upgrade shared
这需要很长时间并且仍然需要我们知道我们什么时候需要 运行 它。
-
此外,我们已尝试让
yarn link
正常工作,但似乎link 无法正常工作我们尝试使用
post-pull
钩子husky
到 运行yarn upgrade shared
但它太慢 运行每次拉动,尤其是因为它并不经常需要我们已经考虑过像 Lerna 这样的真正的单一存储库 'package',但仍然认为没有必要迁移成本
link-module-alias to sym link folders on post install script, but this fails with typescript files
目标
- 要么
- 找到一种在
dev
环境中自动同步这些内容的方法 - 找到一个手动 installs/updates 的解决方案 - 但速度很快,并且可以 运行 每次拉动
- 找到一种方法 运行 使
yarn upgrade shared
运行(大致)仅在需要时自动化 - 我想我们可以找到一种方法来在
shared
的version
密钥发生任何变化时自动增加版本,然后跟踪它,我们可以 运行yarn install
并且该工作有效。
- 找到一种在
找到的解决方案是我们使用的是 React-Native,因此正常的同步步骤适用于 IDE 但不适用于 React-Native 应用程序。
Here 是一篇很棒的文章,描述了如何让 metro bundler 使用它——但是对于 Typescript,我们将它添加到 TSConfig 中,对于 IDE,我们仍然需要将它添加到我们的包中使用 file:../shared
指令。