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 (六) jquery中的AJAX使用
Feb 23 Javascript
你必须知道的Javascript知识点之&quot;深入理解作用域链&quot;的介绍
Apr 23 Javascript
javascript笛卡尔积算法实现方法
Apr 08 Javascript
jquery validate.js表单验证入门实例(附源码)
Nov 10 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
Apr 19 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
jquery select插件异步实时搜索实例代码
Oct 20 jQuery
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
Mar 22 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
关于Vue中axios的封装实例详解
Oct 20 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
显示youtube视频缩略图和Vimeo视频缩略图代码分享
2014/02/13 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
扩展String功能方法
2006/09/22 Javascript
datePicker——日期选择控件(with jquery)
2007/02/20 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
Python map和reduce函数用法示例
2015/02/26 Python
python使用Queue在多个子进程间交换数据的方法
2015/04/18 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
python爬虫基本知识
2018/03/05 Python
pandas求两个表格不相交的集合方法
2018/12/08 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
pandas 对group进行聚合的例子
2019/12/27 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
置业顾问岗位职责
2014/03/02 职场文书
企业文化宣传标语
2014/06/09 职场文书
明星员工获奖感言
2014/08/14 职场文书
毕业生见习报告总结
2014/11/08 职场文书
教师个人学习总结
2015/02/11 职场文书
杨善洲观后感
2015/06/04 职场文书
聘任书格式及范文
2015/09/21 职场文书
Java 在线考试云平台的实现
2021/11/23 Java/Android