【问题标题】:Share a common package between server and client在服务器和客户端之间共享一个公共包
【发布时间】:2015-09-20 15:18:01
【问题描述】:

我想要进行以下项目设置: 三个顶级文件夹client、common 和server。它们都是一个单独的包,有自己的 package.json 和 node_modules 文件夹。

对于下面的例子,我使用这个结构:

- common
  - node_modules
  - package.json
  - entities.ts

- server
  - node_modules
  - package.json
  - app.ts
  - tsconfig.json

我尝试在服务器文件夹中运行 tsc

客户端和服务器都应该使用的文件将位于公共文件夹中,我想使用 ES6 模块语法从服务器和客户端导入它们,例如 import {MyModel} from 'common/entities';

问题是我不知道如何设置 typescript 来理解这个设置。

我使用npm link 使 common 在服务器中显示为正常的 node_module,但上面的导入会生成错误Cannot find module 'common/entities'。我尝试将"moduleResolution": "node" 添加到compilerOptions 没有结果。

是否有可能让 typescript 来理解这个设置,或者是否有一个首选的设置?

【问题讨论】:

  • 你很久以前就问过这个问题——从那以后在寻找答案方面有什么进展吗?
  • 基本上虽然比我想要的要先进一些。您必须单独构建 common 到 .d.ts 和 .js 文件,并使用 npm 链接(或纱线工作区以获得最大的舒适度)才能像任何其他节点模块一样使用 common

标签: typescript


【解决方案1】:

是否有可能让 typescript 来理解这个设置,或者是否有一个首选的设置?

我倾向于只使用带有单个 node_modulessingle tsconfig.json。然后小心不要在前端使用commonclient 之外的东西。

它仍然比没有 TypeScript 的安全性要好。

【讨论】:

  • 只有一个 node_modules 很难构建一个好的人工制品,因为它需要摇树来删除客户端中未使用的模块,否则会产生大量输出。我想以一种好的方式解决这个问题,否则我将求助于纯 JS。我的观点是测试应该提供安全性,类型只是为了让开发人员感到舒适。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 2020-05-11
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
相关资源
最近更新 更多