Skip to content

Commit dd98fa6

Browse files
authored
fix: fix tsx compilation (#4894)
closes #4892 closes #4893
1 parent d21245d commit dd98fa6

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

packages/@vue/cli-plugin-typescript/__tests__/tsPluginBabel.spec.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
jest.setTimeout(30000)
22

33
const Service = require('@vue/cli-service/lib/Service')
4+
const create = require('@vue/cli-test-utils/createTestProject')
45
const { assertServe, assertBuild } = require('./tsPlugin.helper')
56

67
test('using correct loader', () => {
@@ -30,3 +31,25 @@ const creatorOptions = {
3031

3132
assertServe('ts-babel-serve', creatorOptions)
3233
assertBuild('ts-babel-build', creatorOptions)
34+
35+
test('tsx-build', async () => {
36+
const project = await create('tsx', creatorOptions)
37+
await project.write('src/components/HelloWorld.vue', `
38+
<script lang="tsx">
39+
import Vue, { CreateElement } from 'vue'
40+
import Component from 'vue-class-component'
41+
42+
@Component
43+
export default class World extends Vue {
44+
render (h: CreateElement) {
45+
return (
46+
<p>This is rendered via TSX</p>
47+
)
48+
}
49+
}
50+
</script>
51+
`)
52+
53+
const { stdout } = await project.run('vue-cli-service build')
54+
expect(stdout).toMatch('Build complete.')
55+
})

packages/@vue/cli-plugin-typescript/index.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,13 @@ module.exports = (api, projectOptions) => {
2222
const tsxRule = config.module.rule('tsx').test(/\.tsx$/)
2323

2424
// add a loader to both *.ts & vue<lang="ts">
25-
const addLoader = ({ loader, options }) => {
26-
tsRule.use(loader).loader(loader).options(options)
27-
tsxRule.use(loader).loader(loader).options(options)
25+
const addLoader = ({ name, loader, options }) => {
26+
tsRule.use(name).loader(loader).options(options)
27+
tsxRule.use(name).loader(loader).options(options)
2828
}
2929

3030
addLoader({
31+
name: 'cache-loader',
3132
loader: require.resolve('cache-loader'),
3233
options: api.genCacheConfig('ts-loader', {
3334
'ts-loader': require('ts-loader/package.json').version,
@@ -38,6 +39,7 @@ module.exports = (api, projectOptions) => {
3839

3940
if (useThreads) {
4041
addLoader({
42+
name: 'thread-loader',
4143
loader: require.resolve('thread-loader'),
4244
options:
4345
typeof projectOptions.parallel === 'number'
@@ -51,11 +53,13 @@ module.exports = (api, projectOptions) => {
5153
// TODO: I guess the intent is to require the `babel-loader` provided by the Babel vue
5254
// plugin, but that means we now rely on the hoisting. It should instead be queried
5355
// against the plugin itself, or through a peer dependency.
56+
name: 'babel-loader',
5457
// eslint-disable-next-line node/no-extraneous-require
5558
loader: require.resolve('babel-loader')
5659
})
5760
}
5861
addLoader({
62+
name: 'ts-loader',
5963
loader: require.resolve('ts-loader'),
6064
options: {
6165
transpileOnly: true,

0 commit comments

Comments
 (0)