babel7.x和webpack4.x配置vue项目的方法步骤


Posted in Javascript onMay 12, 2019

很偶然的今天想开个自己的小项目,记录一下最近项目工程上实现的一个小交互。按照之前运行非常流畅的配置走一遍,打包遇到各种坑。只好根据命令行的报错逐个排查,发现babel升级了一个大版本,已经到7.x了。看来每日沉迷项目,已经跟不上节奏了。这里记录一下遇到的问题以及解决方案。

1.webpack 4.x 插件 extract-text-webpack-plugin

(node:2628) DeprecationWarning: Tapable.plugin is deprecated. Use new API on `.hooks` instead
i 「wds」: Project is running at http://localhost:8300/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from F:\private\plugin-insert\dist
F:\private\plugin-insert\node_modules\webpack\lib\Chunk.js:838
        throw new Error(
        ^

Error: Chunk.entrypoints: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead
  at Chunk.get (F:\private\plugin-insert\node_modules\webpack\lib\Chunk.js:838:9)
  at F:\private\plugin-insert\node_modules\extract-text-webpack-plugin\dist\index.js:176:48
  at Array.forEach (<anonymous>)
  at F:\private\plugin-insert\node_modules\extract-text-webpack-plugin\dist\index.js:171:18
  at AsyncSeriesHook.eval [as callAsync] (eval at create (F:\private\plugin-insert\node_modules\tapable\lib\HookCodeFactory.js:32:10), <anonymous>:7:1)
  at AsyncSeriesHook.lazyCompileHook (F:\private\plugin-insert\node_modules\tapable\lib\Hook.js:154:20)
  at Compilation.seal (F:\private\plugin-insert\node_modules\webpack\lib\Compilation.js:1231:27)
  at hooks.make.callAsync.err (F:\private\plugin-insert\node_modules\webpack\lib\Compiler.js:541:17)
  at _done (eval at create (F:\private\plugin-insert\node_modules\tapable\lib\HookCodeFactory.js:32:10), <anonymous>:9:1)
  at _err1 (eval at create (F:\private\plugin-insert\node_modules\tapable\lib\HookCodeFactory.js:32:10), <anonymous>:32:22)

extract-text-webpack-plugin 提取单独打包css文件时报错,官方安装部分的文档只写到了webpack 3,目前还没有webpack 4版本,可以使用 extract-text-webpack-plugin@next 解决,也可以使用 mini-css-extract-plugin 。

mini-css-extract-plugin 插件用法如下:

const MiniCssExtractPlugin = require("mini-css-extract-plugin") ;

const config = module.exports = {

 plugins: [
  
 new MiniCssExtractPlugin({
   
 filename: "[name].[chunkhash:8].css",
   
  chunkFilename: "[id].css"
  
  })

 ],

 
module: {
  
rules: [
   
 {
   
 test: /\.css$/,
   
 use: [
    
 
MiniCssExtractPlugin.loader,
    
 
 "css-loader"
    
 ]
  
 }
 
 ]
 
 }
}

module.exports = config

2.babel 升级 6.x 到 7.x

(1) @babel/core

Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Cannot find module '@babel/core'
 babel-loader@8 requires Babel 7.x (the package '@babel/core'). 
 If you'd like to use Babel 6.x ('babel-core'), you should install 'babel-loader@7'.

没找到 @babel/core ,这里把 babel-core 卸载,并安装 @babel/core 。

npm un babel-core
npm i -D @babel/core

(2) @babel/preset-*

Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Plugin/Preset files are not allowed to export objects, only functions.

将 babel-preset-* 卸载,重新安装 @babel/preset-* ,并且修改 .babelrc 中的 presets

npm:
- babel-preset-env
+ @babel/perset-env

.babelrc:
- "presets": ["env"]
+ "presets": ["@babel/preset-env"]

另,stage-*已弃用

(3) @babel/plugin-*

Module build failed (from ./node_modules/babel-loader/lib/index.js):
TypeError: this.setDynamic is not a function
  at PluginPass.pre
  ...

这次是插件了,一样把babel-plugin-*卸载,重新安装@babel/plugin-*

然后修改.babelrc文件

具体的包名可以在 npm仓库 里找

(4) 最终文件

.babelrc
{
  "presets": ["@babel/preset-env"],
  "plugins": [
      "@babel/plugin-transform-runtime"
  ]
}

package.json
"devDependencies": {
  "@babel/core": "^7.1.2",
  "@babel/plugin-transform-runtime": "^7.1.0",
  "@babel/preset-env": "^7.1.0",
  "babel-loader": "^8.0.4",
  
  ...
 },
"dependencies": {
  "@babel/runtime": "^7.1.2",
  "vue": "^2.5.17",
  "vue-loader": "^15.4.2",
  "vue-router": "^3.0.1",
  "vuex": "^3.0.1",
  "webpack": "^4.22.0",
  "webpack-cli": "^3.1.2",
  "webpack-dev-server": "^3.1.10",
  "webpack-merge": "^4.1.4"
  ...
 }

(5) 总结

babel 舍弃了以前的 babel-*-* 的命名方式,改成了 @babel/*-*

修改依赖和 .babelrc 文件后就能正常启动项目了。

3.vue-loader 15.x vueLoaderPlugin

vue-loader was used without the corresponding plugin. 
Make sure to include VueLoaderPlugin in your webpack config.
//两个方式都可以的,随便用一个

const VueLoaderPlugin = require('vue-loader/lib/plugin');

// 或者 

const { VueLoaderPlugin } = require('vue-loader');


plugins: [
  // make sure to include the plugin for the magic
  new VueLoaderPlugin()
]

详细 https://github.com/vuejs/vue-loader/issues/1238

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 实现复制到粘贴板的功能代码
May 13 Javascript
用JS控制回车事件的代码
Feb 20 Javascript
封装好的js判断操作系统与浏览器代码分享
Jan 09 Javascript
jQuery EasyUI Pagination实现分页的常用方法
May 21 Javascript
最实用的jQuery分页插件
Oct 09 Javascript
简单易懂的天气插件(代码分享)
Feb 04 Javascript
react router4+redux实现路由权限控制的方法
May 03 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
js实现搜索栏效果
Nov 16 Javascript
详解Vue-axios 设置请求头问题
Dec 06 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
Mar 26 Javascript
JavaScript事件委托实现原理及优点进行
Aug 29 Javascript
vue轻量级框架无法获取到vue对象解决方法
May 12 #Javascript
使vue实现jQuery调用的两种方法
May 12 #jQuery
React优化子组件render的使用
May 12 #Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 #Javascript
vue组件中watch props根据v-if动态判断并挂载DOM的问题
May 12 #Javascript
用js简单提供增删改查接口
May 12 #Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 #Javascript
You might like
PHP实现的简易版图片相似度比较
2015/01/07 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
Js中的onblur和onfocus事件应用介绍
2013/08/27 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JS之相等操作符详解
2016/09/13 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python写的ARP攻击代码实例
2014/06/04 Python
Python访问纯真IP数据库脚本分享
2015/06/29 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
小区消防演习方案
2014/02/21 职场文书
服务宗旨标语
2014/07/01 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
资料员岗位职责范本
2015/04/13 职场文书
微信搭讪开场白
2015/05/28 职场文书
实习单位意见
2015/06/04 职场文书
员工手册董事长致辞
2015/07/29 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
python如何查找列表中元素的位置
2022/05/30 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技