webpack开发环境和生产环境的配置区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

1.定义:

开发环境:开发人员调试开发的一种环境: 方便调试,保持高效的开发
生产环境:发布上线的环境: 让程序在生产环境中正常有效的运行

  • 开发环境的需求:
        模块热更新 (本地开启服务,实时更新)
        sourceMap (代码映射,方便打包调试)
        接口代理  (配置proxyTable解决开发环境中的跨域问题)
        代码规范检查 (代码规范检查工具)
  • 生产环境的需求:
        提取公共代码    
        压缩混淆(压缩混淆代码,清除代码空格,注释等信息使其变得难以阅读)
        文件压缩/base64编码(压缩代码,减少线上环境文件包的大小)
        去除无用的代码
  • 开发环境和生产环境的共同需求:
        入口
        代码处理(loader处理)
        解析配置

2.webpack配置文件

搭建好Vue-cli脚手架之后,build文件夹会分别自动的生成webpack.base.conf.js、webpack.dev.conf.js、webpack.prod.conf.js三个webpack配置文件:

  • webpack.base.conf.js:webpack的开发环境和生产环境的共有配置(开发环境和生产环境都是需要执行的配置)
  • webpack.dev.conf.js:webpack的开发环境的特有配置(只在开发环境中执行,生产环境中不执行)
  • webpack.prod.conf.js:webpack的生产环境的特有配置(只在生产环境中执行,开发环境中不执行)

webpack.base.conf.js配置

const path = require('path');
//清除build/dist文件夹文件
const CleanWebpackPlugin = require('clean-webpack-plugin');
//生成创建Html入口文件
const HtmlWebpackPlugin = require('html-webpack-plugin');
//将css提取到单独的文件中
const MiniCssExtract = require('mini-css-extract-plugin');
//css压缩
const OptimizeCss = require('optimize-css-assets-webpack-plugin');
//压缩js文件
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
//引入webpack
const webpack = require('webpack');

module.exports = {
//webpack 入口文件
    entry: './src/index.js',
//webpack 输出文件配置
    output: {
    //输出文件路径
        path: path.resolve(__dirname, 'dist'),
   //输出文件名
        filename: 'k-editor.[hash:8].js',
    },
  //配置插件
    plugins: [
    //使用插件清除dist文件夹中的文件
        new CleanWebpackPlugin({
            path: './dist'
        }),
    //使用插件生成Html入口文件
        new HtmlWebpackPlugin({
         //模板文件路径
            template: "./src/index.html",
        //模板文件名
            filename: "index.html",
            minify: {
                removeAttributeQuotes: true, //删除双引号,
                collapseWhitespace: true,    //压缩成一行,
            },
            hash: true
        }),
      //提取css到style.css中
        new MiniCssExtract({
            filename: 'style.css'
        }),
    ],
    resolve: {
        // modules: [path.resolve('node_modules')],//只在当前目录下查找
        alias: { //别名
            'bootstrap': 'bootstrap/dist/css/bootstrap.css',
        },
        // mainFields: ['style', 'main'],//优先寻找style,
        // mainFiles: [],//入口文件的名字,默认index.js
        // extensions: ['js', 'css', 'json', 'vue']//扩展名顺序
    },
   //loader加载器模块配置
    module: {
        rules: [
            {
            //正则表达式匹配.css为后缀的文件
                test: /\.css$/,
           //使用loader
                use: [
                    MiniCssExtract.loader,
                    'css-loader',
                    {
                        loader: "postcss-loader"
                    },
                ]
         //正则表达式匹配.less为后缀的文件
         //使用lodaer来处理
            }, {
                test: /\.less$/,
                use: [
                    MiniCssExtract.loader,
                    'css-loader',
                    {
                        loader: "postcss-loader"
                    },
                    'less-loader'
                ]
            },
            /* {
                 test: /\.js$/,
               //不包括node_modules
                 exclude: /node_modules/,
                 use: [{
                     loader: "eslint-loader",
                     options: {
                         enforce: 'pre'    //强制更改顺序,pre 前  post 后
                     }
                 }],
             },*/
            {
                test: /\.js$/,  //普通的loader
               //不包括node_modules
                exclude: /node_modules/,
                use: [{
                    loader: "babel-loader"
                }]
            },
            {
                test: /\.html$/,
                use: ['html-withimg-loader']
            },
            {
                test: /\.(gif|png|jpg)$/,
                use: [{
                    loader: "url-loader",
                    options: {
             //图片小于10kb就是图片地址,大于正常打包成base64格式编码    
                        limit: 10000,
                       //输出路径
                        outputPath: 'img/'
                    }
                }]
            }
        ]
    },
};

webpack.dev.conf.js配置:

//引入webpack-merge插件进行合并
const {merge} = require('webpack-merge');
//引入webpack.base.conf.js文件
const base = require('./webpack.base.conf');
//引入webpack
const webpack = require('webpack');
//进行合并,将webpack.base.conf.js中的配置合并到这
module.exports = merge(base, {
   //模块参数
    mode: 'development',
    devServer: {
        contentBase: './dist',
      //端口号
        port: '8383',
        inline: true,
        historyApiFallback: true,//在开发单页应用时非常有用,它依赖于HTML5 history API,如果设置为true,所有的跳转将指向index.html
        hot: true//允许热加载
    },
//启用source-map方便调试
    devtool: 'source-map',
    plugins: [
       //定义全局变量
        new webpack.DefinePlugin({
         //这里必须要解析成字符串进行判断,不然将会被识别为一个变量
            DEV: JSON.stringify('dev')
        })
    ]
});

webpack.prod.conf.js:

const {merge} = require('webpack-merge');
const base = require('./webpack.base');

const path = require('path');
const OptimizeCss = require('optimize-css-assets-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const webpack = require('webpack');

module.exports = merge(base, {
    mode: 'production',
    optimization: {
        minimizer: [
          //压缩CSS代码
            new OptimizeCss(),
          //压缩js代码
            new UglifyJsPlugin({
              //启用文件缓存
                cache: true,
             //使用多线程并行运行提高构建速度
                parallel: true,
             //使用 SourceMaps 将错误信息的位置映射到模块
                sourceMap: true
            })
        ]
    },
    plugins:[
     //使用插件定义全局变量DEV
        new webpack.DefinePlugin({
            DEV:JSON.stringify('production')
        })
    ]
});

最后package.json文件配置:

	"scripts": {
	    "test": "npm  run test",
	    "dev": "webpack-dev-server --config webpack.dev.js",
	    "build": "webpack --config webpack.prod.js"
	  },

3.webpack区分开发环境和生产环境

在node中有一个对象process对象,它里面包括env和它的一些属性,NODE_ENV是我们自己加上去的自定义属性,用来区分环境变量,也就是通过这个变量来进行区别是开发环境还是生产环境;但是有个问题,不同电脑上设置的方式是不一样的,所以就出现了cross-env

cross-env:跨平台设置环境和使用环境变量

npm install cross-env

在webpack.base.conf.js文件中修改代码:

const NODE_ENV=process.env.NODE_ENV;

修改package.json文件:

//--config是可以设置我们执行哪个webpack文件,默认是执行webpack.config.js,但是我们现在修改文件名了,所以我们要设置一下
"build": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js", // 生产环境打包
"dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.config.dev.js" // 开发环境
大数据面试题(附答案,持续更新...) 说说对hadoop的理解,都有哪些组件,分别是干什么的 还了解大数据其他组件嘛? kafka在什么地方需要用到zookeeper 了解HBase吗? 说下spark中的transformaction 为什么spark要把操作分为transformaction spark中有了RDD,为什么还要有DataframeDataSet? 了解函数式编程吗?说下c/c++scala这种函数式编程语... 阅读详情

相关推荐

从零开始用QP框架开发STM32:事件驱动编程实战指南(附状态机设计技巧)

本文详细介绍了如何使用QP框架在STM32上实现事件驱动编程,包括状态机设计技巧嵌入式开发实践。通过对比传统前后台系统RTOS,展示了QP框架在资源占用、实时性代码可维护性方面的优势,并提供了从环境搭建到高级状态机设计的完整指南。

h6i7j8的博客 1146

开发环境生产环境区别

开发环境(development) 开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。(程序员接到需求后,开始写代码,开发,运行程序,看看程序有没有达到预期的功能;) 测试环境(testing) 一般是克隆一份生产环境配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。(程序员开发完成后,交给测试部门全面的测试,看看所实现的功能有没有bug,测试人员会模拟各种操作情况;) 生产环境(production) 生产环境是指正式提供对外服务的,一

csdnzlcheng的博客 1万+

全志平台camera驱动开发(3)MIPI接口camera驱动开发

详细沟通: 请加video_D 目前开发过的allwinner平台: V5/V3/V3S/V40/T3/T7/A64等 开发过的mipi sensor: sony:imx317、imx477、imx274、imx258、imx286、imx307、imx385等 ov:ov2718、ov12895、ov2710等 ar: ar0238等 国产:gc1024、gc1034...

jzwjzw19900922的博客 8997

webpack入门(十一)-- 配置环境开发环境生产环境配置

webpack环境配置

weixin_43516605的博客 1026

webpack生产环境开发环境

webpack生产环境开发环境

weixin_43353035的博客 629

什么是开发、测试、生产环境

1、本地环境(local) 本地环境是指开发人员在个人计算机或本地服务器上进行软件开发、调试测试的个人工作环境,用于独立开发运行代码,不其他开发人员共享资源。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 4193

开发环境生产环境第三方模块config

一、什么是开发环境生产环境 环境,就是指项目运行的地方,当项目处于开发阶段,项目运行在开发人员的电脑上,项目所处的环境就是开发环境。当项目开发完成以后,要将项目放到真实的网站服务器电脑中运行,项目所处的环境就是生产环境。 通俗一点就是: 1:开发环境:项目尚且在编码阶段,我们的代码一般在开发环境中 不会在生产环境中,生产环境组成:操作系统 ,web服务器 ,语言环境。 php 。 数据库 。 ...

kiku 1230

一文大白话讲清楚webpack基本使用——8——开发环境生产环境配置区别

一文大白话讲清楚webpack基本使用——8——开发环境生产环境配置区别

xiaobangkeji的博客 460

Webpack配置区分开发环境生产环境

  在项目开发的时候,我们通常会将程序分为开发环境生产环境(或者叫线上环境),开发环境通常指的是我们正在开发的这个阶段所需要的一些环境配置,也就是方便我们开发人员调试开发的一种环境生产环境通常指的是我们将程序开发完成经过测试之后无明显异常准备发布上线的环境,也可以理解为用户可以正常使用的就是生产环境;   当然开发环境生产环境配置方面的需求是不一样的,但是有共同点:   开发环境的需求...

有梦想的咸鱼前端 4262

Webpack | 开发环境生产环境基础指令

开发环境生产环境是有区别的,开发完成后的项目还需要再进行一些其它处理才能构建到生产环境。 新建src、build文件夹 index.js位于src下 index.js : webpack入口起点文件 1. 运行指令: 开发环境webpack ./src/index.js -o ./build/built.js --mode=development webpack会以 ./src/index.js 为入口文件开始打包 打包后输出到 ./build/built.js

weixin_43817992的博客 233

webpack生产环境构建

开发环境(development)生产环境(production)的构建目标差异很大。 在开发环境中,我们需要具有强大的、具有实时重新加载(live reloading)或热模块替换(hot module replacement)能力的 source map localhost server。 而在生产环境中,我们的目标则转向于关注更小的 bundle,更轻量的 source map,以及更优化的资源,以改善加载时间。由于要遵循逻辑分离,我们通常建议为每个环境编写彼此独立的 webpack 配置。 虽

zk86547462的博客 386

学习前端打包工具webpackvite

首先,得先了解开发环境: 1、开发环境 顾名思义,开发同学开发时使用的环境,每位开发同学在自己的dev分支上干活,提测前或者开发到一定程度,各位同学会合并代码,进行联调。 2.生产环境 即线上环境,用户使用的环境。由特定人员来维护,一般人没有权限去修改。 另外,还有个灰度发布,发生在预发布环境之后,生产环境之前。 生产环境一般会部署在多台机器上,以防某台机器出现故障,这样其他机器可以继续运行,不影响用户使用。灰度发布会发布到其中的几台机器上,验证新功能是否正常。如果失败,只需回滚这几台机器即..

suzhiwei_boke的博客 1499

Webpack搭建ES6开发环境(部分摘自网络)

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。有需要面试题资料的朋友点击这里可以免费领取。技术是没有终点的,也是学不完的,最重要的是活着、不秃。

2401_84091502的博客 991

Webpack搭建ES6开发环境(部分摘自网络),详细学习指南

总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习工作中不断积累坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践总结。点击这里领取Web前端开发经典面试题容对你有帮助,可以扫码获取!!(备注:前端)**总结来说,面试成功=基础知识+项目经验+表达技巧+运气。

2401_84093837的博客 1308

webpackvue-cli环境变量配置

利用webpack打包代码时,如果需要区分生产开发环境分就需要用到环境变量。 webpack环境变量配置 首先需要在webpack 命令行配置 --env: webpack --env.production # 设置 env.production == true webpack --env.NODE_ENV=local # 设置 env.NODE_ENV == "loca...

weixin_34026484的博客 1087

两个输出文件名解析为同一输出路径_webpack配置解析及从零开始搭建一个开发环境...

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。本文将介绍webpack的常用配置以及如何使用webpack搭建一个开发环境。基本配置mode: webpack工作在那种模式下,并使用相应模式的内置优化,可选值为'none', 'development' , 'production'entry: 打包入口文件, 值可以是字符串、数组、对象...

weixin_39559559的博客 367

vue-cli webpack配置分析 - chenBright - SegmentFault 思否

后记总结一下这三次面试下来我的经验是:一定不要死记硬背,要理解原理,否则面试官一深入就会露馅!代码能力一定要注重,尤其是很多原理性的代码(之前两次让我写过Node中间件,Promise.all,双向绑定原理,被虐的怀疑人生)!尽量从面试官的问题中表现自己知识的深度广度,让面试官发现你的闪光点!多刷面经!

2401_84150206的博客 838

Webpack中的sourceMap配置

---------------------------------------webpack.config.js----------------------------------------------------------module.exports = { mode:'development', // 开发环境 development // devtool:...

weixin_30258027的博客 168

Webpack Vite 的 5 大核心区别:选型不再纠结

Webpack Vite 的 5 大核心区别

qqyy910的博客 629

webpack 入门到精通详细环境配置教程

Webpack学习笔记 文章目录一、Webpack简介1.1 Webpack是什么1.2 Webpack的五个核心概念1.2.1 enter1.2.2 output1.2.3 loader一、pandas是什么?二、使用步骤1.引入库2.读入数据总结项目场景:问题描述:原因分析:解决方案: 一、Webpack简介 1.1 Webpack是什么 Webpack是一种前端资源构建工具,一种静态模块打包器(module bundler) 在webpack看来,前端的所有资源(js/json/css/img/l

weixin_52125363的博客 1637

1. 重学webpack——webpack5.0基本概念

推荐:《webpack学完这些就够了》 《webpack学完这些就够了》该专题主要讲述webpack4.x从入门到成仙的学习笔记,配置原理应有尽有。现在由于webpack5.0的诞生,打算从现在开始从0开始写一遍webpack5.0的学习笔记,大家一起分享学习。 以下是本节正文: 1. webpack基本概念 webpack支持CommonJsES Module 在pacakge.json的scripts中,dev中原先配置使用的webpack-dev-server,现在只小改成ser

2024路在何方 1313
上一篇: Vue、OpenLayers结合天地图实现Gis
下一篇: Vue.js CLI4.0 vue.config.js配置
蜗牛与藤曼
博客等级 码龄9年 1万+粉丝 89原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值