简述使用vue使用webpack脚手架创建项目并升级至webpack4

news2024/10/6 20:27:26

第一步、输入命令 vue init webpack demo2 (demo2表示项目名称),回车后等待项目完成创建;

第二步、打开package.json,升级以下依赖(建议升级一项依赖后运行一下项目)

  • webpack系列
    webpack 3.6.0 -> 4.46.0
    webpack-cli -> 3.3.12
    webpack-dev-server 2.9.1 -> 3.11.3
    webpack-marge 4.1.0 -> 4.2.2
    

卸载:npm uninstal webpack webpack-cli webpack-dev-server webpack-merge

安装:npm i -D webpack@4.30.0 webpack-cli@3.3.12 webpack-dev-server@3.11.3 webpack-merge@4.2.2

  • babel系列
    使用命令npx babel-upgrade --write 升级(babel7系列)
  • eslint系列
    eslint 4.15.0 -> 7.32.0
    eslint-config-standard 10.2.1 -> 16.0.3
    eslint-friendly-formatter 3.0.0 -> 4.0.1
    eslint-plugin-import 2.7.0 -> 2.26.0
    eslint-plugin-node 5.2.0 -> 11.1.0
    eslint-plugin-promise 3.4.0 -> 5.2.0
    eslint-plugin-standard 3.0.1 -> 删除
    eslint-plugin-vue 4.0.0 -> 9.7.0
    

卸载:npm uninstall eslint eslint-config-standard eslint-friendly-formatter eslint-plugin-import eslint-plugin-node eslint-plugin-promise eslint-plugin-standard eslint-plugin-vue

安装:npm install -D eslint@7.32.0 eslint-config-standard@16.0.3 eslint-friendly-formatter@4.0.1 eslint-plugin-import@2.26.0 eslint-plugin-node@11.1.0 eslint-plugin-promise@5.2.0 eslint-plugin-vue@9.7.0

  • webpack插件系列
    clean-webpack-plugin -> 3.0.0
    copy-webpack-plugin 4.0.1 -> 6.4.1
    extract-text-webpack-plugin -> mini-css-extract-plugin 0.11.0
    friendly-errors-webpack-plugin 1.6.1 -> 1.7.0
    html-webpack-plugin 2.30.1 -> 4.5.0
    optimize-css-assets-webpack-plugin 3.2.0 -> 5.0.8
    uglifyjs-webpack-plugin -> terser-webpack-plugin 4.2.3
    webpack-bundle-analyzer 2.9.0 -> 4.5.0
    

卸载:npm uninstall copy-webpack-plugin extract-text-webpack-plugin friendly-errors-webpack-plugin html-webpack-plugin optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin webpack-bundle-analyzer

安装:npm install -D clean-webpack-plugin@3.0.0 copy-webpack-plugin@5.1.2 mini-css-extract-plugin@0.11.0 friendly-errors-webpack-plugin@1.7.0 html-webpack-plugin@4.5.0 optimize-css-assets-webpack-plugin@5.0.8 terser-webpack-plugin@4.2.3 webpack-bundle-analyzer@4.5.0

  • loader系列
    babel-loader 8.0.0 -> 8.3.0
    css-loader 0.28.0 -> 3.6.0
    eslint-loader -> eslint-webpack-plugin 2.7.0
    file-loader 1.1.4 -> 6.2.0
    postcss-loader 2.0.8 -> 4.3.0
    style-loader -> 2.0.0
    url-loader 0.5.8 -> 4.1.1
    vue-loader 13.3.0 -> 15.7.0
    

卸载:npm uninstall babel-loader css-loader eslint-loader file-loader postcss-loader url-loader vue-loader

安装:npm install -D babel-loader@8.3.0 css-loader@3.6.0 eslint-webpack-plugin@2.7.0 file-loader@6.2.0 postcss-loader@4.3.0 style-loader@2.0.0 url-loader@4.1.1 vue-loader@15.7.0

  • vue系列(根据实际需要升级)
    vue 2.5.2 -> 2.7.8
    vue-template-compiler 2.5.2 -> 2.7.8 (注:和vue版本必须一致)
    vue-router 3.0.1 -> 3.5.1
    vuex 3.6.2
    

卸载:npm uninstall vue vue-template-compiler vue-router vuex

安装:

npm install -D vue-template-compiler@2.7.8
npm install vue@2.7.8 vue-router@3.5.1 vuex@3.6.2
  • 其它依赖
    core-js -> 3.26.1
    less -> 4.1.3
    less-loader -> 7.3.0
    sass -> 1.56.1
    sass-loader -> 10.4.1
    node-sass -> 4.14.1
    

安装:npm install -D core-js@3.26.1 less@4.1.3 less-loader@7.3.0 sass@1.56.1 sass-loader@10.4.1 node-sass@4.14.1

第三步、配置webpack

1、修改build/utils.js文件

1.1 删掉ExtractTextPlugin依赖导入
1.2 添加依赖
	const MiniCssExtractPlugin = require('mini-css-extract-plugin')
1.3 将
    return ExtractTextPlugin.extract({
      use: loaders,
      fallback: 'vue-style-loader'
    }) 
  替换成
    return [MiniCssExtractPlugin.loader].concat(loaders)

2、修改build/webpack.base.conf.js文件

2.1 添加依赖
	const VueLoaderPlugin = require('vue-loader/lib/plugin')
	const ESLintPlugin = require('eslint-webpack-plugin')
2.2 添加plugins代码段
	plugins: [
	    new VueLoaderPlugin(),
	    new ESLintPlugin({
	      fix: true, // 启用ESLint自动修复功能
	      extensions: ['js', 'jsx'],
	      context: resolve('src'), // 文件根目录
	      exclude: ['/node_modules/'], // 指定要排除的文件/目录
	      cache: true //缓存
	    }),
	],
2.3 删除代码段1
	const createLintingRule = () => ({
	  test: /\.(js|vue)$/,
	  loader: 'eslint-loader',
	  enforce: 'pre',
	  include: [resolve('src'), resolve('test')],
	  options: {
	    formatter: require('eslint-friendly-formatter'),
	    emitWarning: !config.dev.showEslintErrorsInOverlay
	  }
	})
2.4 删除代码段2
    ...(config.dev.useEslint ? [createLintingRule()] : []),

3、修改build/webpack.dev.conf.js文件

3.1 删除代码
	new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
	new webpack.NoEmitOnErrorsPlugin(),
3.2 修改copy-webpack-plugin代码
	new CopyWebpackPlugin({
      patterns: [
        {
          from: path.resolve(__dirname, '../static'),
          to: config.dev.assetsSubDirectory,
        },
        // 多个资源文件夹可以以对象形式添加
        // {
        //   from: path.resolve(__dirname, '../public'),
        //   to: './',
        // }
      ]
    }),

4、修改build/webpack.prod.conf.js文件

4.1 修改全部依赖
	const path = require('path')
	const utils = require('./utils')
	const webpack = require('webpack')
	const config = require('../config')
	const merge = require('webpack-merge')
	const baseWebpackConfig = require('./webpack.base.conf')
	const CopyWebpackPlugin = require('copy-webpack-plugin')
	const HtmlWebpackPlugin = require('html-webpack-plugin')
	const MiniCssExtractPlugin = require('mini-css-extract-plugin')
	const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
	const TerserPlugin = require('terser-webpack-plugin')
	const { CleanWebpackPlugin } = require('clean-webpack-plugin')
	const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
4.2 修改Plugins代码部分
	删除所有new webpack.optimize.CommonsChunkPlugin部分
	删除new webpack.optimize.ModuleConcatenationPlugin(),
	添加clean-webpack-plugin、mini-css-extract-plugin、bundleAnalyzerPlugin插件
	修改后plugins代码段:
	plugins: [
	    // http://vuejs.github.io/vue-loader/en/workflow/production.html
	    new webpack.DefinePlugin({
	      'process.env': env
	    }),
	    // 打包时首先将dist文件夹内容清空
	    new CleanWebpackPlugin(),
	    // extract css into its own file
	    new MiniCssExtractPlugin({
	      filename: utils.assetsPath('css/[name].[contenthash].css'),
	    }),
	    // generate dist index.html with correct asset hash for caching.
	    // you can customize output by editing /index.html
	    // see https://github.com/ampedandwired/html-webpack-plugin
	    new HtmlWebpackPlugin({
	      filename: process.env.NODE_ENV === 'testing'
	        ? 'index.html'
	        : config.build.index,
	      template: 'index.html',
	      // favicon: path.resolve(__dirname, '../public/favicon.ico'),
	      inject: true,
	      minify: {
	        removeComments: true,
	        collapseWhitespace: true,
	        removeAttributeQuotes: true
	        // more options:
	        // https://github.com/kangax/html-minifier#options-quick-reference
	      },
	      // necessary to consistently work with multiple chunks via CommonsChunkPlugin
	      chunksSortMode: 'none', // 如果使用webpack4将该配置项设置为'none'
	    }),
	    // keep module.id stable when vendor modules does not change
	    new webpack.HashedModuleIdsPlugin(),
	    // enable scope hoisting
	    // new webpack.optimize.ModuleConcatenationPlugin(),
	    // copy custom static assets
	    new CopyWebpackPlugin({
	      patterns: [
	        {
	          from: path.resolve(__dirname, '../static'),
	          to: config.build.assetsSubDirectory,
	        },
	        // 多个资源文件夹可以以对象形式添加
	        // {
	        //   from: path.resolve(__dirname, '../public'),
	        //   to: './',
	        // }
	      ]
	    }),
	    // webpack-bundle-analyzer
	    // 可以是`server`,`static`或`disabled`。
	    // 在`server`模式下,分析器将启动HTTP服务器来显示软件包报告。
	    // 在“静态”模式下,会生成带有报告的单个HTML文件。
	    new BundleAnalyzerPlugin({
	      analyzerMode: "static",
	      analyzerHost: "127.0.0.1",
	      analyzerPort: 8882, //注意是否有端口冲突
	      reportFilename: "report.html",
	      defaultSizes: "parsed",
	      openAnalyzer: true,
	      generateStatsFile: false,
	      statsFilename: "stats.json",
	      statsOptions: null,
	      logLevel: "info",
	    }),
],
4.3 webpack 4 将CommonsChunkPlugin部分内容放到optimization中了
	添加optimization代码段,与plugins同级:
	optimization: {
	    runtimeChunk: {
	      name: 'runtime'
	    },
	    minimizer: [
	      new TerserPlugin({
	        test: /\.js(\?.*)?$/i,
	        exclude: /\.min\.js$/i, // 过滤掉以".min.js"结尾的文件,
	        parallel: true,
	        sourceMap: config.build.productionSourceMap,
	        extractComments: false, // 是否将注释剥离到单独的文件中
	        terserOptions: {
	          compress: {
	            unused: true,
	            drop_debugger: true, // 移除所有debugger
	            drop_console: true, // 移除所有console
	            pure_funcs: [ // 移除指定的指令,如console, alert等
	              'console.log',
	              'console.error',
	              'console.dir',
	            ],
	          },
	          format: {
	            comments: false, // 删除注释
	          },
	        }
	      }),
	      new OptimizeCssAssetsPlugin({
	        cssProcessorOptions: config.build.productionSourceMap
	          ? { safe: true, map: { inline: false } }
	          : { safe: true, }
	      }),
	    ],
	    splitChunks: {
	      chunks: 'async',
	      minSize: 30000,
	      minChunks: 1,
	      maxSize: 0,
	      maxAsyncRequests: 5,
	      maxInitialRequests: 3,
	      automaticNameDelimiter: '~',
	      name: false,
	      cacheGroups: {
	        vendor: {
	          test: /node_modules\/(.*)\.js/,
	          name: 'vendor',
	          chunks: 'initial',
	          priority: -10,
	          reuseExistingChunk: false,
	        },
	        styles: {
	          test: /\.(less|css|s(a)css)$/,
	          name: 'styles',
	          chunks: 'all',
	          minChunks: 1,
	          reuseExistingChunk: true,
	          enforce: true
	        },
	        default: {
	          minChunks: 2,
	          priority: -20,
	          reuseExistingChunk: true
	        }
	      }
	    }

5、修改config/index.js文件

5.1 修改build下的assetsPublicPath
	assetsPublicPath: '/',  ==>  assetsPublicPath: './',

6、修改根目录下的.babelrc文件

6.1 修改corejs版本为3
	"corejs": 2   ==>  "corejs": 3

7、尝试运行项目:npm run start
成功运行
8、尝试打包项目:npm run build
成功打包

小贴士:工具可以千千万万,但是核心知识点基本不变;学好JS,走遍前端都不怕!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue实现下载及文件重命名

效果如下&#xff1a; 实现步骤&#xff1a; html&#xff1a; <el-table-column prop"name" label"操作" align"center" header-align"center" width"165"><template slot-scope"scope"><el-but…

MindSpore和Python中nn.Unfold的区别

在往MindSpore迁移项目中遇到了这个转换&#xff0c;以至于不得不去仔细研究一下。 Unfold是卷积操作中的一部分&#xff0c;我们来看一下描述。 Unfold()函数是从一个batch图片中&#xff0c;提取出滑动的局部区域块&#xff0c;也就是卷积操作中的提取kernel filter对应的滑…

图片如何加水印?教你几招轻松加

相信很多喜欢出门游玩的小伙伴&#xff0c;会习惯将旅途中遇到的风景、趣事将其拍照记录下来&#xff0c;然后将图片分享到社交账号上去&#xff0c;但是互联网上什么人都有&#xff0c;总会有不怀好意的人&#xff0c;会在网上拿别人辛苦拍摄的照片&#xff0c;据为己有去发布…

开放式运动耳机哪款好,盘点几款目前最好的开放式耳机分享

如果是在户外运动的时候喜欢戴耳机&#xff0c;那么必然是要选择骨传导耳机&#xff0c;开放式耳道的设计在跑步的过程中&#xff0c;可以很快察觉到来往行人车辆&#xff0c;在安全方面能够极大缩小隐患的发声&#xff0c;无需入耳的佩戴设计能够以最大程度的释放我们的耳道长…

[翻译] 使用FXGL创建一个简单游戏 Pong (FXGL 11)

在本文中&#xff0c;我们将复刻经典的Pong游戏。要完成本教程&#xff0c;你首先需要获取FXGL要么通过Maven / Gradle&#xff0c;要么作为uber-jar。确保你使用FXGL 11 (例如11.3)。 本教程大部分是独立的&#xff0c;但是完成以前的基本教程将对一般理解非常有帮助。完整的…

刷题日记【第十三篇】-笔试必刷题【数根+星际密码+跳台阶扩展问题+快到碗里来】

刷题日记【第十三篇】-笔试必刷题【数根星际密码跳台阶扩展问题快到碗里来】 1.方法区在JVM中也是一个非常重要的区域&#xff0c;它与堆一样&#xff0c;是被【线程共享】的区域。 下面有关JVM内存&#xff0c;说法错误的是&#xff1f;(c) A.程序计数器是一个比较小的内存区…

GO语言之Goroutine和channel

1&#xff0c;goroutine-看一个需求 需求&#xff1a;要求统计1-90000000000的数字中&#xff0c;哪些是素数哦&#xff1f; 分析思路&#xff1a; 1&#xff09;传统的方法&#xff0c;就是使用一个循环&#xff0c;循环的判断各个数是不是素数。 2&#xff09;使用并发或…

Metabase学习教程:提问-5

多级聚合 如何使用查询生成器对多个部分提出问题。 许多分析问题只需四个步骤即可回答&#xff1a; 连接需要的表得到需要的信息。过滤数据使其仅包含期望的记录。分组和聚合这些数据&#xff0c;创造你所需要的价值。可视化结果&#xff0c;方便直观的理解数据告诉了你什么…

SpringBoot 集成JWT实现登录认证

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 一、JWT简介 JSON Web Token&#xff08;JWT&#xff09;是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递…

基于粒子群优化算法的最佳方式设置无线传感器节点的位置,以减轻由于任何能量耗尽节点而产生的覆盖空洞(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

数据脱敏的安全管理

什么是数据脱敏 我们需要先说下什么是敏感数据&#xff0c; 敏感数据泛指个人信息&#xff08;姓名、电话、住址、健康信息、证件等数据&#xff09;、涉及需要保护的数据。 数据脱敏&#xff0c;是将敏感数据按照一定的规则对敏感数据进行变形&#xff0c;达到保护用户信息安…

提升80%上云集成效率, TA是如何做到的

摘要&#xff1a;基于华为云开天aPaaS&#xff0c;提升80%上云集成效率&#xff0c;降低50%集成成本没有充足资金&#xff0c;没有足够的项目规划和过渡时间&#xff0c;也没有经验丰富的IT团队支持&#xff0c;中小企业的上云路可谓是困难重重。如何帮助企业高效上云、实现降本…

【Globalmapper中文入门到精通系列实验图文教程】(附配套实验数据持续更新)

【Globalmapper中文版入门到精通系列实验图文教程】&#xff08;附配套实验数据持续更新&#xff09; 文章目录一、专栏简介二、文章目录三、数据目录四、传送门一、专栏简介 本专栏为GlobalMapper中文入门实战精品教程&#xff0c;内容主要涉及&#xff1a;Globalmapper23软件…

【Oracle】数据库账号频繁被锁问题解决

文中使用的Oracle版本为11g。 今天在测试环境中遇到了一个问题&#xff0c;如下图&#xff1a; 所有的数据库客户端访问Oracle11g都出现了上面的提示“ORA-28000: the account is locked”&#xff0c;一开始其实并不知道是什么原因引起的问题&#xff0c;到后面才发现是登录错…

Kotlin 开发Android app(九):Android两大布局LinearLayout和RelativeLayout

Kotlin 的基本特性就先写到这里&#xff0c;我们这个系列的定位是基础&#xff0c;也就是能用就好&#xff0c;够用就好&#xff0c;我们不会举太多的例子&#xff0c;但是这些都是最经常用到的特性。 从这节开始就是Kotlin和android 进行结合&#xff0c;使用Kotlin进行安卓应…

基于Spring Cloud的架构使用学习升级之路

引言 Spring Cloud全家桶用了挺长时间了&#xff0c;很长一段时间都是基于已有的架构进行需求研发。今年成为团队技术负责人&#xff0c;承担了新的项目&#xff0c;这是很好的一个机会&#xff0c;于是开启了项目架构升级之路。 架构&#xff0c;是团队项目的根基。在一个团…

数字信号处理-5-傅里叶分析

1 傅里叶系数 傅里叶级数用公式如下&#xff1a; a0、a1、a2、a3…b1、b2、b3…叫做傅里叶系数。cosnx 或 sinnx 中的 n 对应着频率&#xff0c;决定 sin、cos 大小的系数是 an、bn。 2 傅里叶变换 步骤1 求傅里叶系数 从原波形 F(x) 中求傅里叶系数中的 a0、a1、a2、a3……

IPD-产品需求管理过程(1)

一、产品需求管理模型 在确定客户需求时,要考虑影响用户购买标准的八类基本需求($APPEALS),并基于客户视角进行详细分解,形成有针对性的产品。 1.1、需求管理业务流程 二、需求收集流程 2.1、需求收集的来源 路标规划:通过市场管理流程分析,落实到路标规划中的需求…

python中StringIO和BytesIO

1. 类文件对象 最常见的io操作是将磁盘中的文件读到内存以及内存内容写入文I件。还有一种内存和内存之间的IO&#xff0c;叫类文件对象&#xff0c;python中的StringIO和BytesIO就是类文件对象&#xff0c;通俗解释即&#xff1a;像操作文件一样在内存中操作字符串和二进制内容…

基于FPGA的SD卡的数据读写实现(SD NAND FLASH)

文章目录 1、存储芯片分类 2、NOR Flash 与 NAND Flash的区别 3、什么是SD卡&#xff1f; 4、什么是SD NAND&#xff1f; 5、SD NAND的控制时序 6、FPGA实现SD NAND读写 6.1、设计思路 6.2、仿真结果 6.3、实验结果 1、存储芯片分类 目前市面上的存储芯片&#xff0…