【vue】babel的介绍以及编写vue文件

18 篇文章 0 订阅
14 篇文章 1 订阅

一、Babel

是一个单独的工具,与webpack独立,但是可以和webpack一起使用
作用:es6或者 typescript 转化为普通的js代码
场景:比如一个旧浏览器不认识demo.js中的es6的箭头函数

单独使用(不和webpack一起使用时):

npm install @babel/core  @babel/cli@babel/core  @babel/cli -D
//这样node_modules就有babel相关代码了
npx babel demo.js  --out-dir dist//不改变文件名字时
这样会在项目生成dist/demo.js,并且还是ES6代码
npx babel demo.js --out-file test.js
这样会在项目生成 test.js 还是es6代码
//因为没有使用箭头函数转换相关的插件
npm install @babel/plugin-transform-arrow-functions -D
然后
npx babel demo.js --out-file test.js --plugins=@babel/plugin-transform-arrow-functions

这样就会看到test.js没有了箭头函数,变成了es5的内容,成功!

可以加多个函数转换相关的插件比如
npx babel demo.js --out-file test.js --plugins=@babel/plugin-transform-arrow-functions,@babel/plugin-transform-block-scoping
这样就会看到test.js没有箭头函数,也没有了块级作用域(const,let变成了var)
这样每个语法转换都需要插件的话,那也太麻烦了,于是出现了
babel的预设preset
使用方法:
npm install @babel/preset -env -D
npx babel demo.js --out-file test.js --presets=@babel/preset-env
综上可见,babel是一个编译工具,从一个源代码编译成另外一个源代码。

二、webpack与babel结合

webpack打包main.js时不会转es6为es5,
因为这不是他的工作,这是就需要用到集成到webpack的babel工具:babel-loader

第一步:npm install babel-loader @babel/core  @babel/cli -D因为之前安装过,所以不用安装了
第二步:在webpack.config.js中,写上
const path=require('path')
module.exports={
entry:'./src/main.js',
output:{
  path:path.resolve(__dirname,'./build')
  filename:'bundle.js'
  },
 module:{
  rules:[
  {
    test:/\.css$/ 正则表达式
    loader:"css-loader"   下边use的语法糖
   use:[
   {loader:"css-loader",options:{}}
   {loader:"file-loader",options:{
      outputpath:"img",
      name:"[name]_[hash:6].[ext]"
    }}
   ]
 } 
{
    test:/\.js$/ 正则表达式
    use:{
      loader:"babel-loader",
      options:{
        plugins:[       
  "@babel/plugin-transform-arrow-functions",
  "@babel/plugin-transform-block-scoping"
            ]
        preset:[//不写plugin也可以这么写
         "@babel/preset-env"
        }
     }
   
 }
}

这样很臃肿,因为options可能会很大,于是可以抽取出来,两种命名方式
babel.config.js/json/cjs/mjs(推荐)
babelrc.json/js/babeljs/cjs/mjs

babel.config.js中写上

module.exports ={
  presets:[
  "@babel/preset-env"
  ]
}

在webpack.config.js中

{
test:/\.js$/
loader:"babel-loader"
}

这样配置后,dist中的代码也是es5的代码了

三、webpack打包vue文件

webpack与vue
vue本身也是js代码,

在main.js中引入vue模块:
npm install vue@next;
import {createApp} from 'vue'
在后边就可以
const app = createApp({
  template:'<h2>我是vue2解析出来的<h2>'
  data(){
    return{
     title:"hello world"
    }
  }
});
app.mount("#app");

这样还是不能解析出来,
因为template的内容需要vue源码对其进行解析,但是vue源代码给我们提供了很多版本,但是所有版本分为两类,一种是runtime+compliler(暂时定义为版本一),
,一种是runtime-only(暂时定义为版本二)
如果写了template:·xxxx·内容的话,需要compliler解析那么必须用版本一,但是默认用的是版本二
(如果template不这么写的话就没事儿,比如.vue文件)
vue开发过程中有三种方式编写DOM元素
方式一:template模板的方式,需要vue源码中的代码
方式二:render函数的方式,使用h函数来编写渲染的内容,直接返回vnode,不用我们处理
方式三:通过.vue中的template来编写模板,需要vue-loader

打包后不同vue版本解析
打开node_module后,找到vue包

3.1、vue(.runtime).global(.prod).js

首先说vue.global.js,如果通过浏览器

3.2、vue(.runtime).esm-browser(.prod).js

esmodule专用vue版本,这个js打开是esmodule形式的

3.3、vue(.runtime).esm-bundler.js

用于webpack,eollup,parcel等构建工具
默认是带runtime的,这就是上边main.js没有加载出template的原因,解决办法
import {createApp} from ‘vue/dist/vue.esm-bunder.js’

3.4、vue.cjs(.prod).js

服务器端渲染使用,
通过require()在node.js中使用

四、vscode对sfc文件的支持

如果不安装这两个插件,那么vscode根本不认识.vue文件是啥
vetur插件
volar插件

五、编写vue文件

新建一个vue文件夹
新建App.vue

<template></template>
<script>
export default {
xxx
data/method..
没有template,因为loader会对其解析
解析后就会把template加入到里边并导出去
}
</script>
<style>
</style>
main.js中最上边
import App from './vue/App.vue'

const app = createApp(App);

编译失败,因为webpack不认识.vue,所以需要一个loader,(和css一样),

npm install vue-loader@next -D
npm install @vue/compiler-sfc
webpack.config.js中写上
{
  test:/\.vue$/,
  loader:"vue-loader"
}

此外还需要一个插件才能不报错
const { VueLoaderPlugin } = require('vue-loader/dist/index');
在插件里
new VueLoaderPlugin()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘乙江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值