О пути nodejs в webpack, как webpack находит модули в машинописи? - PullRequest
1 голос
/ 30 сентября 2019

Я использую webpack-dev-server для разрешения некоторых типов.

Мой файл конфигурации:

module.exports={
entry: "./src/index.ts",
output: {
    filename: "main.js"
},
resolve:{
    extensions: ['.ts', '.tsx', 'js'],
    modules: [path.resolve(__dirname, 'src'), "node_modules"]
}
...
}

Затем вывод командной строки:

> cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js
i 「wds」: Project is running at http://localhost:8089/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from ./dist
× 「wdm」:
ERROR in (webpack)-dev-server/client?http://localhost:8089
Module not found: Error: Can't resolve './overlay' in 'F:\workspace\tslearn\node_modules\webpack-dev-server\client'
@ (webpack)-dev-server/client?http://localhost:8089 10:14-34
@ multi (webpack)-dev-server/client?http://localhost:8089 ./src/index.ts

индекс.js в webpack-dev-server \ client.js:

var stripAnsi = require('strip-ansi');

var socket = require('./socket');

var overlay = require('./overlay');

var _require = require('./utils/log'),

./overlay.js находится по пути "F: \ workspace \ tslearn \ node_modules \ webpack-dev-server \ client"

Но js по-прежнему не может его найти.

vscode дает мне указание:

Could not find a declaration file for module './socket'. 'f:/workspace/tslearn/node_modules/webpack-dev-server/client/socket.js' implicitly has an 'any' type.

Как это исправить? В чем разница между Typescript и JavaScript в этом?

1 Ответ

0 голосов
/ 01 октября 2019

ФонСам по себе Webpack не работает с Typescript, он использует помощника, такого как ts-loader или другой, в зависимости от файла конфигурации webpack webpack.config.js. Пример конфигурации:

      rules: [
        {
          test: /\.tsx?$/,
          exclude: /node_modules/,
          use: [
            {
              loader: 'ts-loader',
              options: {
                transpileOnly: true,
                happyPackMode: true,
                configFile: path.resolve(__dirname, 'tsconfig.json'),
              },
            }
          ],
        },
        ...
        other rules
        ...
      ]

ts-загрузчик будет переносить Typescript с использованием настроек конфигурации в tsconfig.json.

Как это исправить? в чем разница между Typescript и JavaScript на этом?

tsconfig.json должно иметь "allowJs": true, иначе компилятор Typescript не будет учитывать файлы .js при разрешении импорта. Также компилятор Typescript должен уметь находить overlay.js и другие файлы .js. Он будет искать в нескольких местах, задокументированных здесь в Как TypeScript разрешает модули заголовок.

Наконец, чтобы избавиться от ошибок, связанных с объявлением, запишите файлы декларации,например overlay.d.ts и поместите его рядом с соответствующими файлами .js.

...