Skip to content

Commit 75e3df6

Browse files
Kevin Marrecclarkdo
authored andcommitted
fix(ts): switch from babel preset to ts-loader (nuxt#4563)
1 parent 6e8c4b7 commit 75e3df6

File tree

26 files changed

+164
-101
lines changed

26 files changed

+164
-101
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"rollup-plugin-node-resolve": "^4.0.0",
7575
"rollup-plugin-replace": "^2.1.0",
7676
"sort-package-json": "^1.17.1",
77+
"ts-loader": "^5.3.1",
7778
"typescript": "^3.2.2",
7879
"vue-jest": "^3.0.2",
7980
"vue-property-decorator": "^7.2.0"

packages/babel-preset-app/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
"@babel/plugin-syntax-jsx": "^7.2.0",
1818
"@babel/plugin-transform-runtime": "^7.2.0",
1919
"@babel/preset-env": "^7.2.0",
20-
"@babel/preset-typescript": "^7.1.0",
2120
"@babel/runtime": "^7.2.0",
2221
"babel-helper-vue-jsx-merge-props": "^2.0.3",
2322
"babel-plugin-transform-vue-jsx": "^4.0.1"

packages/babel-preset-app/src/index.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,6 @@ module.exports = (context, options = {}) => {
9292
}
9393
])
9494

95-
// TypeScript preset
96-
if (options.typescript) {
97-
presets.push(require('@babel/preset-typescript'))
98-
}
99-
10095
plugins.push(
10196
require('@babel/plugin-syntax-dynamic-import'),
10297
[require('@babel/plugin-proposal-decorators'), {

packages/builder/src/builder.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ export default class Builder {
4545
restart: null
4646
}
4747

48-
this.supportedExtensions = ['vue', 'js']
49-
if (this.options.build.typescript) {
50-
this.supportedExtensions.push('ts', 'tsx')
51-
}
48+
this.supportedExtensions = ['vue', 'js', 'ts']
5249

5350
// Helper to resolve build paths
5451
this.relativeToBuild = (...args) =>
@@ -326,8 +323,7 @@ export default class Builder {
326323
templateVars.router.routes = createRoutes(
327324
Object.values(files),
328325
this.options.srcDir,
329-
this.options.dir.pages,
330-
this.supportedExtensions
326+
this.options.dir.pages
331327
)
332328
} else { // If user defined a custom method to create routes
333329
templateVars.router.routes = this.options.build.createRoutes(

packages/common/src/utils.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,8 @@ const sortRoutes = function sortRoutes(routes) {
316316
return routes
317317
}
318318

319-
export const createRoutes = function createRoutes(files, srcDir, pagesDir, supportedExtensions = ['vue', 'js']) {
319+
export const createRoutes = function createRoutes(files, srcDir, pagesDir) {
320+
const supportedExtensions = ['vue', 'js', 'ts']
320321
const routes = []
321322
files.forEach((file) => {
322323
const keys = file

packages/config/src/config/build.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ export default () => ({
55
analyze: false,
66
profile: process.argv.includes('--profile'),
77
extractCSS: false,
8-
typescript: false,
98
crossorigin: undefined,
109
cssSourceMap: undefined,
1110
ssr: undefined,

packages/config/src/options.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,10 +118,7 @@ export function getNuxtConfig(_options) {
118118
)
119119
)
120120

121-
const mandatoryExtensions = ['js', 'mjs']
122-
if (options.build.typescript) {
123-
mandatoryExtensions.push('ts')
124-
}
121+
const mandatoryExtensions = ['js', 'mjs', 'ts']
125122

126123
options.extensions = mandatoryExtensions
127124
.filter(ext => !options.extensions.includes(ext))

packages/webpack/src/config/base.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,7 @@ export default class WebpackBaseConfig {
7575
[
7676
require.resolve('@nuxt/babel-preset-app'),
7777
{
78-
buildTarget: this.isServer ? 'server' : 'client',
79-
typescript: this.options.build.typescript
78+
buildTarget: this.isServer ? 'server' : 'client'
8079
}
8180
]
8281
]
@@ -216,7 +215,7 @@ export default class WebpackBaseConfig {
216215
]
217216
},
218217
{
219-
test: this.options.build.typescript ? /\.(j|t)sx?$/ : /\.jsx?$/,
218+
test: /\.jsx?$/,
220219
exclude: (file) => {
221220
// not exclude files outside node_modules
222221
if (!/node_modules/.test(file)) {
@@ -231,6 +230,14 @@ export default class WebpackBaseConfig {
231230
options: this.getBabelOptions()
232231
})
233232
},
233+
{
234+
test: /\.ts$/,
235+
loader: 'ts-loader',
236+
options: {
237+
transpileOnly: true,
238+
appendTsSuffixTo: [/\.vue$/]
239+
}
240+
},
234241
{
235242
test: /\.css$/,
236243
oneOf: styleLoader.apply('css')
@@ -377,10 +384,6 @@ export default class WebpackBaseConfig {
377384
config() {
378385
// Prioritize nested node_modules in webpack search path (#2558)
379386
const webpackModulesDir = ['node_modules'].concat(this.options.modulesDir)
380-
let extensionsToResolve = ['.wasm', '.mjs', '.js', '.json', '.vue', '.jsx']
381-
if (this.options.build.typescript) {
382-
extensionsToResolve = extensionsToResolve.concat(['.ts', '.tsx'])
383-
}
384387

385388
const config = {
386389
name: this.name,
@@ -393,7 +396,7 @@ export default class WebpackBaseConfig {
393396
hints: this.options.dev ? false : 'warning'
394397
},
395398
resolve: {
396-
extensions: extensionsToResolve,
399+
extensions: ['.wasm', '.mjs', '.js', '.json', '.vue', '.jsx', '.ts'],
397400
alias: this.alias(),
398401
modules: webpackModulesDir
399402
},
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<template>
2+
<Nuxt />
3+
</template>
4+
5+
<script lang="ts">
6+
import { Component, Vue } from 'vue-property-decorator'
7+
8+
@Component
9+
export default class DefaultLayout extends Vue {}
10+
</script>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export default function typeScriptModule() {
2+
// Add .ts extension for store, middleware and more
3+
this.nuxt.options.extensions.push('ts')
4+
5+
// Extend build
6+
this.extendBuild((config) => {
7+
// Add TypeScript loader
8+
config.module.rules.push({
9+
test: /\.ts$/,
10+
loader: 'ts-loader',
11+
options: {
12+
transpileOnly: true,
13+
appendTsSuffixTo: ['\\.vue$']
14+
}
15+
})
16+
// Add .ts extension in webpack resolve
17+
config.resolve.extensions.push('.ts')
18+
})
19+
}

0 commit comments

Comments
 (0)