Ошибка компиляции машинописного текста в импортированном реагирующем модуле 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