Прекрасно использовать ts-loader
с Webpack.Наш Vue.js чрезвычайно масштабный, и у нас есть многостраничный SPA с Webpack в качестве нашего упаковщика.Вам не нужно иметь отдельную конфигурацию для ts-loader .Взгляните на наш конфиг Webpack (три экземпляра ts-loader):
const rules = [
{
test: /\.tsx?$/,
loader: 'ts-loader',
include: [...PATHS.shared, path.join(__dirname, 'node_modules')],
options: {
transpileOnly: isDev,
appendTsSuffixTo: [/\.vue$/],
instance: 'common',
configFile: path.join(__dirname, 'tsconfig.json')
}
},
{
test: /\.tsx?$/,
loader: 'ts-loader',
include: [PATHS.app1],
options: {
transpileOnly: isDev,
appendTsSuffixTo: [/\.vue$/],
instance: 'app1',
configFile: path.join(PATHS.app1, 'tsconfig.json')
}
},
{
test: /\.tsx?$/,
loader: 'ts-loader',
include: [PATHS.app2],
options: {
transpileOnly: isDev,
appendTsSuffixTo: [/\.vue$/],
instance: 'app2',
configFile: path.join(PATHS.app2, 'tsconfig.json')
}
}
];
Возвращаясь к вашему вопросу, я добился успеха с @babel/preset-typescript
, но мы не используем файлы .vue
как есть проблемы при обработке .vue
файлов. Примечание: мы устанавливаем transpileOnly
в значение false во время разработки.
Если вы можете переключиться на использование синтаксиса классов с @Component
декоратором и использовать vue-template-loader, затем вы можете переключиться на использование Babel + TypeScript.Есть небольшие неприятные сюрпризы, такие как отсутствие поддержки const enums
, пространств имен и т. Д.
Примечание. Использование ts-loader
по сравнению с @babel/preset-typescript
имеет свои преимущества.В сочетании с Webpack, ts-loader
более взломан.Если вам нужен типизированный JSX, то есть поддержка TSX с Vue.js, тогда маршрут babel имеет больше смысла.Если вы используете .vue
файлы, то нет существенной разницы.