Karma, Webpack и Typescript: TS2307: не удается найти модуль log4js или соответствующие ему объявления типов.

При запуске кармы (npx karma start) выдает ошибку о модуле

× 「atl」: Checking finished with 1 errors
i 「atl」: Checking started in a separate process...
× 「atl」: Checking finished with 1 errors
× 「wdm」:
ERROR in [at-loader] ./node_modules/@types/karma/index.d.ts:14:26
    TS2307: Cannot find module 'log4js' or its corresponding type declarations.
i 「wdm」: Failed to compile.
23 07 2020 12:53:39.790:WARN [karma]: No captured browser, open http://localhost:9876/
23 07 2020 12:53:39.803:INFO [karma-server]: Karma v5.1.0 server started at http://0.0.0.0:9876/
23 07 2020 12:53:39.803:INFO [launcher]: Launching browsers Chrome with concurrency unlimited
23 07 2020 12:53:39.820:INFO [launcher]: Starting browser Chrome
23 07 2020 12:53:41.358:INFO [Chrome 84.0.4147.89 (Windows 10)]: Connected on socket CIrhkw1m_-3oa6JsAAAA with id 44315598
Chrome 84.0.4147.89 (Windows 10): Executed 0 of 1 SUCCESS (0 secs / 0 secs)
Chrome 84.0.4147.89 (Windows 10): Executed 1 of 1 SUCCESS (0.125 secs / 0.002 secs)
TOTAL: 1 SUCCESS

Он действительно успешно выполняет тесты, но выдает ошибку о log4js. Как я могу решить эту ошибку? (Я уже пробовал установить пакет log4js npm)

Конфигурация кармы:

    config.set({
        basePath: "",
        frameworks: ["mocha"],
        files: [
            "UnitTests/**/*.browsertest.ts",
        ],
        preprocessors: {
            "UnitTests/**/*.browsertest.ts": "webpack",
        },
        webpack: webpackConfig,
        webpackMiddleware: {
          stats: 'errors-only'
        },
        reporters: ["progress"],
        browsers: ["Chrome"],
        autowatch: false,
    });

Конфигурация Webpack (упрощенная, но я подтвердил, что это вызывает ту же ошибку):

{
      mode: "development",
      entry: {
         "dist/main.bundle": "./TypeScript/Main.entry.ts",
      },
      output: {
         path: path.join(__dirname, "wwwroot"),
         filename: "[name].js"
      },
      devtool: "source-map",
      resolve: {
         extensions: [".ts", ".js"]
      },
      module: {
         rules: [
            { 
               test: /\.tsx?$/, exclude: [/node_modules/], 
               use: ["awesome-typescript-loader"]
            }
         ]
      }
   }

tsconfig:

{
   "compileOnSave": true,
   "compilerOptions": {
      "experimentalDecorators": true,
      "sourceMap": true,
      "strictNullChecks": true,
      "noImplicitAny": true,
      "module": "amd",
      "target": "es6",
      "jsx": "react",
      "jsxFactory": "renderDom",
      "declaration": false,
      "esModuleInterop": true,
      "lib": [
         "WebWorker",
         "DOM",
         "es6"
      ],
      "typeRoots": [
         "./node_modules/@types",
         "./@types"
      ]
   },
   "include": [
      "TypeScript/**/*",
      "UnitTests/**/*"
   ],
   "exclude": ["node_modules"]
}

Что я уже пробовал:

Установка log4js путем запуска yarn add log4js и yarn add @types/log4js


person Leonie    schedule 23.07.2020    source источник


Ответы (1)


На данный момент у меня есть решение, но если кто-то знает лучшее решение, я хотел бы знать. Потому что для этого требуется скопировать файл из node_modules, и он не будет обновлен, если пакет будет обновлен.

Я скопировал содержимое из node_modules/log4js/types/log4js.d.ts в новый файл, который я создал в @types/log4js/index.d.t.s (обратите внимание, что это наш собственный каталог @types, настроенный в нашем tsconfig, показанном выше, это не папка в модулях узлов). Затем я немного изменил этот индекс, добавив его вверху файла:

declare module "log4js" {

И внизу файла:

}
person Leonie    schedule 24.07.2020