【问题标题】:Multiple tsconfig.json issue with commonJS for node.js and es6 for reactjsnode.js 的 commonJS 和 reactjs 的 es6 的多个 tsconfig.json 问题
【发布时间】:2018-01-09 09:02:14
【问题描述】:

我当前的 typescript 文件夹结构:

ts_dev
--client
  *components.tsx
  *tsconfig.json

--server
  *server.ts
  *tsconfig.json
  --share
    *utility.ts

Node.js 服务器需要使用commonjs模块,客户端端组件需要使用es2015。我将 clientserver 使用的 share 文件夹放在 server 目录下,因为它需要commonJS节点.js。

服务器中的

tsconfig.json:

{
  "compilerOptions": {
    "module": "commonJS",
    "target": "es2015",
    "moduleResolution": "node",
    "outDir": "../../src",
    "lib": ["es6", "dom"],
    "types": ["reflect-metadata","system"],
    "jsx": "react"
  },
  "exclude": [
    "node_modules",
  ]
}

客户端中的tsconfig.json:

{
  "compilerOptions": {
    "module": "es2015",
    "target": "es2015",
    "moduleResolution": "node",
    "outDir": "../../src",
    "lib": ["es6", "dom"],
    "types": ["reflect-metadata","system"],
    "jsx": "react"
  },
  "exclude": [
    "node_modules",
  ]
}

但是我发现share 中的脚本总是在 es6(使用导出、导入等)而不是 commonJS 中编译,这会破坏我的服务器。我怀疑这是由client 中的 tsconfig 引起的。我可以做些什么来解决这个问题?

【问题讨论】:

    标签: node.js reactjs typescript typescript2.0 tsconfig


    【解决方案1】:

    我建议在每个带有文件 glob 的 tsconfig.json 文件中使用 include 选项,以限制通过每个配置文件编译的文件。

    我通过使用不同的outDirs 解决了我的类似问题。我认为发生在你身上的是你编译了两次源文件,最后一次将 JS 编译为es2015,覆盖了第一次。换句话说,server 版本首先被编译,然后client 版本被编译并覆盖它,因为输出将进入同一目录。

    【讨论】:

    • 等等,目录是一样的,是的,但是文件名不同。在那种情况下是什么?如果我想将一个*.ts 文件编译为commonjs,第二个编译为web(即none 模块)怎么办?
    • @vintproykt 您可以在相应的包含部分中使用文件 glob 来匹配您希望包含在该特定配置文件中的文件名吗?
    • 我最终得到了一个不明显的(起初)结论,即我需要将这些目录分离到独立的存储库中,并处理进一步项目的 monorepo 架构。现在,我需要它作为非模块和 Visual Studio Code 扩展的应用程序,两者都不再有编译冲突!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2020-12-26
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多