gpt4 book ai didi

typescript - 在 commonjs 和 ejs 之间共享文件,Typescript 不是 commonjs 文件上的 module.ts(2306)

转载 作者:行者123 更新时间:2023-12-04 08:09:50 28 4
gpt4 key购买 nike

背景
我有一个文件需要在两个存储库之间共享。该文件包含一个对象。

  • Repo A 设置为仅接受 commonjs 文件( require("/path/to/file") ),我无法轻松访问其 babel 配置。
  • Repo B 正在使用 ES6 import foo from "bar"进口风格,我可以玩它tsconfig.json .

  • 我知道如果我使用 modules.export = myObject它仅适用于 commonjs 存储库(存储库 A),如果我这样做 export = myObjectexport default myObject它仅适用于 ES6 存储库(存储库 B)。
    问题:
  • 这可以到吗?使相同的文件适用于两个系统 ?我试过 export = modules.export = myObject或任何其他组合,但没有任何效果。
  • 如何在 ES6 存储库中导入 commonjs 版本? 我试着把它留一个 commonjs modules.export = myObject文件,但是当我这样做时在 Repo B 中 import foo from "path/to/file"它一直在哭泣以下消息。当我将其更改为 export = myObject 时它就会消失,但它不适用于 repo A。
  • File '/path/to/file.ts' is not a module.ts(2306)
    笔记
  • 我发现设置 "esModuleInterop": true在我的 tsconfig.json should make it work ,但无论我做什么,(tsconfig.json 中的任何 "module" 值,打开 allowSyntheticDefaultImports )它都不起作用。我一直得到同样的2306错误。
  • 正如我在评论中提到的,可以认为该文件包含一个静态对象。 (例如 {a: 5, b: 8};)

  • 配置文件
    我接触的 repo A 中的部分是 config file for Quasar它在 Vanilla JS 中。
    Repo B 是 Typescript/Node 项目,里面的 tsconfig.json 相关部分是:
    "compilerOptions": {
    "baseUrl": ".",
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist",
    "strict": true,
    "sourceMap": true,
    "target": "es6",
    ...

    最佳答案

    我刚刚发现只要文件是.json具有正确 JSON 格式的文件,您可以在 ES6 ( import ) 和 CommonJS ( require ) 中使用它。
    this answer (和 this article ),对于 ES6,您需要启用 "resolveJsonModule": true,tsconfig.json然后您可以拥有两种格式的内容。
    所以如果文件 content.json有以下内容(没有评论或其他任何东西):

    {
    "age": 34
    }
    那么我们将有...
    import * as jsonContent from "../../content.json"

    console.log(jsonContent.age); // prints out 34
    const jsonContent = require("../../content.json");

    console.log(jsonContent.age); // prints out 34
    他们都成功打印出内容!

    关于typescript - 在 commonjs 和 ejs 之间共享文件,Typescript 不是 commonjs 文件上的 module.ts(2306),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66038230/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com