vue-cli 3.x 项目,如何增加对 jsx 的支持?

发布于 2022-09-11 20:50:42 字数 388 浏览 22 评论 0

项目代码里引入了 element-ui 源码里的 scrollbar 组件,后者在 node_modules/element-ui/packages/scrollbar/src/main.js 文件里通过 render(h) 进行组件渲染。

本项目启动时报错如下:

图片描述

请问如何在 vue-cli 项目里增加对 jsx 的支持?需要安装什么插件,babel.config.js 又该如何配置?
谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心作怪 2022-09-18 20:50:42

用了babel7的问题,降级到babel6就可以了
把vue-cli创建项目的依赖更新下,卸掉原本的babel-core,install babel6的相关npm包,package.json的依赖如下:

{
    //...
    "devDependencies": {
        "@vue/cli-plugin-eslint": "^4.1.0",
        "@vue/cli-service": "^4.1.0",
        "babel-core": "^6.26.3",
        "babel-eslint": "^10.0.3",
        "babel-loader": "^7.1.5",
        "babel-plugin-syntax-jsx": "^6.18.0",
        "babel-plugin-transform-vue-jsx": "^3.7.0",
        "babel-preset-env": "^1.7.0",
        "eslint": "^5.16.0",
        "eslint-plugin-vue": "^5.0.0",
        "vue-template-compiler": "^2.6.10"
      }
}

然后修改babel.config.js为.babelrc
配置如下

{
  "presets": [
    "env"
  ],
  "plugins": [
    "transform-vue-jsx"
  ]
}

添加vue.config.js文件修改webpack的配置

const path = require('path');

function resolve(name) {
  return path.resolve(__dirname,name)
}

module.exports = {
  chainWebpack: config => {
    const jsRule = config.module.rule('js');
    jsRule.uses.clear();

    jsRule
      .test(/\.js$/)
      .include
        .add( resolve('node_modules/element-ui') )
        .add( resolve('src') )
        .end()
      .use('babel-loader')
        .loader('babel-loader')
        .end();
  }
}

在.vue文件中就可以直接引packages里的组件了

<template>
  <div>
    <Scrollbar />
  </div>
</template>
<script>
import Scrollbar from 'element-ui/packages/scrollbar';

export default {
  name: 'app',
  components: {
    Scrollbar,
  },
  data() {
    return {}
  },
}
</script>
舂唻埖巳落 2022-09-18 20:50:42

vue-cli3默认是支持jsx格式的,但写法与react的jsx不一样,文件还是.vue的,就是平常的vue文件,不要template标签,在script里面写jsx是可以解析的

┊风居住的梦幻卍 2022-09-18 20:50:42

不用降到babel6
这样就行:将babel-plugin-transform-vue-jsx升级成4以上的

Babel Compatibility Notes

  • If using Babel 7, use 4.x
  • If using Babel 6, use 3.x
回首观望 2022-09-18 20:50:42

所以楼主解决了吗

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文