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计算页面刷新的次数
Jul 20 Javascript
extjs之去除s.gif的影响
Dec 25 Javascript
Jquery实现动态切换图片的方法
May 18 Javascript
易被忽视的js事件问题总结
May 14 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
不使用script导入js文件的几种方法
Oct 27 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
JavaScript中Object值合并方法详解
Dec 22 Javascript
小程序云开发之用户注册登录
May 18 Javascript
vue的keep-alive用法技巧
Aug 15 Javascript
Vue单文件组件开发实现过程详解
Jul 30 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
php分页代码学习示例分享
2014/02/20 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
记录微信小程序 height: calc(xx - xx);无效问题
2019/12/30 Javascript
Python3.X 线程中信号量的使用方法示例
2017/07/24 Python
Python探索之Metaclass初步了解
2017/10/28 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
Python 元类实例解析
2018/04/04 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
应届毕业生自我评价分享
2013/12/15 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python