Typescript:让模块解析度(路径/基础),动态导入和resolveJsonModule协同工作

时间:2019-08-02 06:35:35

标签: javascript node.js typescript

问题

我在尝试将Typescripts模块解析与路径,json文件导入和动态导入一起使用时遇到一些问题。这就是我所做的:

  • 首先:我介绍了"resolveJsonModule": true以便能够导入.json文件
  • 第二:我引入了(使用的)动态导入(运行良好)
  • 第三:我在下面的示例中介绍了模块(路径)(这是我的问题)

我不确定,如果我在这里混淆了一些事情。但如果能够将以下三个功能结合使用,将不胜感激:

  • 1个动态导入
  • 2个导入json文件
  • 3使用打字稿模块解析度

信息:

  • 我的节点版本:v11.14.0
  • 我能够使用最新的节点版本,因此这里没有限制

代码:

// 1. dynamic import
const subfolder = 'example'
let { ex } = await import(`./../../some/path/${subfolder}`)
// 2. json file import
import config from './../../config.json'
// 3. module resolution
// some/path/file_a.ts
import { example_function } from '@utils/ex'
...
const result = await example_function()

// src/utils/ex/index.ts
export async function example_function() {}

错误:

上面的代码通过编译器运行,并且编译时没有错误。 但是,当我尝试启动编译后的代码时,会出现如下错误:

➤ node lib/index.js
internal/modules/cjs/loader.js:670
    throw err;
    ^

Error: Cannot find module '@utils/ex'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:668:15)
    at Function.Module._load (internal/modules/cjs/loader.js:591:27)
    at Module.require (internal/modules/cjs/loader.js:723:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/home/mod/cod/wo/thingylabs/calpobot/cb1/lib/utils/pipeline/pipelineRunChatops.js:52:12)
    at Module._compile (internal/modules/cjs/loader.js:816:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:827:10)
    at Module.load (internal/modules/cjs/loader.js:685:32)
    at Function.Module._load (internal/modules/cjs/loader.js:620:12)
    at Module.require (internal/modules/cjs/loader.js:723:19)

试图解决问题

  • 我尝试更改以测试模块和moduleResolution,但没有成功

我完整的tsconfig.json

{
  "compilerOptions": {
    "allowJs": false,
    "lib": ["es2015", "es2017"],
    "module": "commonjs",
    "moduleResolution": "node",
    "target": "es5",
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "noUnusedLocals": false,
    "pretty": true,
    "strict": true,
    "sourceMap": true,
    "outDir": "./lib",
    "skipLibCheck": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
    "declaration": true,
    "resolveJsonModule": true,
    "baseUrl": "./src",
    "paths": {
      "@utils/fs": ["utils/fs"],
      "@pipelines/*": ["pipelines/*"],
      "@jobs/*": ["jobs/*"],
    }
  },
  "include": [
    "src/**/*"
  ],
  "compileOnSave": false
}

1 个答案:

答案 0 :(得分:0)

您在此处讨论的问题:https://github.com/microsoft/TypeScript/issues/24715 作为解决方法,您可以替换

import config from './../../config.json'

const config = require('./../../config.json')