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 相关文章推荐
jquery tab插件制作实现代码
Jun 22 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
Aug 14 Javascript
让table变成exls的示例代码
Mar 24 Javascript
JavaScript获取flash对象与网上的有所不同
Apr 21 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
[原创]jQuery常用的4种加载方式分析
Jul 25 Javascript
vue-router实现编程式导航的代码实例
Jan 19 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 jQuery
ant design vue中表格指定格式渲染方式
Oct 28 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 Javascript
Vue实现todo应用的示例
Feb 20 Vue.js
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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
javascript运动详解
2015/07/06 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
javascript事件模型介绍
2016/05/31 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
利用python求相邻数的方法示例
2017/08/18 Python
python得到单词模式的示例
2018/10/15 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
大学生创业计划书的范文
2014/01/07 职场文书
大学生实习证明范本
2014/09/19 职场文书
社保转移委托书范本
2014/10/08 职场文书
商业用房租赁协议书
2014/10/13 职场文书
委托公证书格式
2015/01/26 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
2019个人工作总结
2019/06/21 职场文书