Ошибка компиляции машинописного текста в импортированном реагирующем модуле node_module, даже если он исключен из tsconfig.json

Я весело проводил время, пытаясь понять, не могу ли я заставить мою сборку машинописи игнорировать node_modules (в частности, React). Мой tsconfig.json говорит, чтобы он игнорировал папку, но он все еще компилируется, и я не уверен, почему. Я подозреваю, может быть, это потому, что он импортируется файлом из включенных файлов, может быть?

Вот пример ошибки, которых много:

ERROR in /Users/rw3iss/Sites/site/src/project/public/node_modules/@types/react/index.d.ts
(3606,13): error TS2403: Subsequent variable declarations must have the same type.  Variable 'feTile' must be of type 'SVGProps<SVGFETileElement>', but here has type 'SVGProps<SVGFETileElement>'.

Мой tsconfig.json выглядит так:

{
  "compilerOptions": {
    "jsx": "react",
    "target": "es6",
    "module": "commonjs",
    "noEmitOnError": true,
    "noImplicitAny": false,
    "experimentalDecorators": true,
    "sourceMap": true,
    "strictNullChecks": true,
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "noImplicitThis": true,
    "noFallthroughCasesInSwitch": true,
    "allowJs": true,
    "outDir": "build",
    "noResolve": false,
    "moduleResolution": "node",
    "typeRoots": [
      "./node_modules/@types",
      "./secure/node_modules/@types",
      "./public/node_modules/@types"
    ],
    "types": [ "react" ]
  },
  "filesGlob": [
  ],
  "include": [
    "secure/src/**/*",
    "public/react_src/**/*"
  ],
  "exclude": [
    "node_modules/**/*",
    "public/node_modules/**/*",
    "secure/node_modules/**/*",
    "public/dist"
  ],
  "types": [ "react" ]
}

Я пытаюсь скомпилировать его с помощью webpack/ts-loader, и моя конфигурация webpack:

var webpack = require('webpack');
var path = require('path');

var BUILD_DIR = path.resolve(__dirname, 'build');
var APP_DIR = path.resolve(__dirname, 'src');

var config = {

    entry: {
        app: [
            APP_DIR + '/react_src/Secure.tsx',
            APP_DIR + '/react_src/DicomViewer.tsx'
        ]
    },

    output: {
        publicPath: '/',
        path: BUILD_DIR, // 'dist'
        filename: '[name].js', // 'index.js'
        //libraryTarget: 'umd'
    },

    resolve: {
        extensions: ['.js', '.jsx', '.ts', '.tsx'],
        modules: [ 'node_modules', 'src' ]
    },

    module: {
        rules: [
            { 
                test: /\.(t|j)sx?$/, 
                include: APP_DIR,
                exclude: [
                        path.resolve(__dirname, 'node_modules'),
                        '../public/node_modules',
                        '../node_modules'
                    ],
                loader: ['ts-loader']
            }
        ]
    }
};

module.exports = config;

Может кто-нибудь сказать мне, почему эти ошибки происходят, и, возможно, как избежать их и других ошибок, которые могут появиться в импортированных node_modules?

Обновление: я удалил все под 'typeRoots' и установил для 'types' значение []:

"typeRoots": [],
"types": []

Но все равно выкидывает те же ошибки. Я просто пытаюсь понять, почему...

1 ответ

Я не могу заставить свою сборку машинописи игнорировать node_modules (в частности, React). Мой tsconfig.json говорит, чтобы он игнорировал папку, но он все еще компилируется, и я не уверен, почему.

Ошибка связана с объявлениями типа реакции в @types каталог. Даже если мы исключим node_modules, @types каталог включен в сборник.

Вот еще одна, соответствующая информация из документов:

По умолчанию все видимые пакеты "@types" включены в вашу компиляцию... Если указан typesRoots, будут включены только пакеты в typeRoots... Если указаны типы, будут включены только перечисленные пакеты.

Ваш tsconfig включает в себя types свойство, которое указывает [ "react" ], Изменение types свойство пустого массива [] может устранить ошибку. Обратите внимание, что types принадлежит под compilerOptions не на высшем уровне.

Также см. https://github.com/Microsoft/TypeScript/issues/11257

Другие вопросы по тегам