首页 > 其他分享 >webpack4.15.1 学习笔记(五) — 生产环境构建

webpack4.15.1 学习笔记(五) — 生产环境构建

时间:2023-01-02 22:12:07浏览次数:70  
标签:const webpack4.15 笔记 js merge webpack 构建 common require

webpack4.15.1 学习笔记(五) — 生产环境构建

 

 

目录

 

生产环境构建

developmentproduction的构建目标差异很大。dev中,需要具有实时重新加载或HMR能力的 source map 和 server。而在prod中目标则关注更小的 bundle,更轻量的 source map,以及更优化的资源,以改善加载时间。由于要遵循逻辑分离,通常建议为每个环境编写彼此独立的webpack 配置。

虽然将两者做了略微区分,但是还是会遵循不重复原则(DRY),保留一个通用配置,不必在环境特定的配置中重复代码。再使用 webpack-merge 的工具将这些配置合并在一起。

安装 webpack-merge 将配置代码进行分离:

npm install --save-dev webpack-merge

创建对应环境的配置和通用配置文件:

webpack.common.js 中,设置了 entry 和 output ,并且引入两个环境公用的全部插件。

webpack.dev.js 中,添加了推荐的 source mapdevServer

webpack.prod.js 中,引入了 tree shaking的相关配置。

webpack.common.js

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: {
        app: './src/index.js'
    },
    output: {
       filename: '[name].bundle.js',
       path: path.resolve(__dirname, 'dist')
    },
    plugins: [
        new CleanWebpackPlugin({
            cleanStaleWebpackAssets: false
        }),
        new HtmlWebpackPlugin({
            title: 'Production'
        })
    ],
};

webpack.dev.js

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

module.exports = merge(common, {
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist'
    }
});

webpack.prod.js

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

module.exports = merge(common, {
    devtool: 'source-map',
    optimization: {
        usedExports: true,  
        minimize: true, 
    },
});

设置新的scripts 执行命令,运行脚本查看输出结果的变化:

"scripts": {
    "devbuild": "webpack-dev-server --open --config webpack.dev.js",
    "prodbuild": "webpack --config webpack.prod.js"
},

指定环境

NODE_ENV 是由 Node.js 暴露给执行脚本的系统环境变量。通常用于决定在开发环境与生产环境下,服务器工具、构建脚本和客户端库的行为。然而无法 webpack.config.js 中,直接将 process.env.NODE_ENV 设置为 "production"

许多库与process.env.NODE_ENV 环境变量关联,决定引用哪些内容。当处于开发环境时,为了分布调试,可能会添加额外的日志和测试。使用 process.env.NODE_ENV === 'production' 时,还可能进行代码优化,从而删除或添加一些代码。可以使用 webpack 内置的 DefinePlugin定义这个环境变量:

webpack.prod.js

const webpack = require('webpack');
module.exports = merge(common, {
    plugins: [
        new webpack.DefinePlugin({
            'process.env.NODE_ENV': JSON.stringify('production')
        })
    ]
});
JS 复制 全屏

修改入口 index.js ,查看环境变量的值,重新编译和打包后:

// index.js
console.log( process.env.NODE_ENV );   // 执行 devbuild 打印 'development',执行 prodbuild 打印 'production',

标签:const,webpack4.15,笔记,js,merge,webpack,构建,common,require
From: https://www.cnblogs.com/sexintercourse/p/17020679.html

相关文章

  • webpack4.15.1 学习笔记(七) — 懒加载(Lazy Loading)
    懒加载或者按需加载,是一种很好的优化网页或应用的方式。实际上是先把代码在一些逻辑断点处分离开,然后在一些代码块中完成某些操作后,立即引用或引用另外一些新的代码块。这......
  • webpack4.15.1 学习笔记(六) — 代码拆分(Code Splitting)
    webpack4.15.1学习笔记(六)—代码拆分(CodeSplitting)  目录入口起点防止重复动态导入(dynamicimports) 代码拆分能够将代码分离到不同的bundle中......
  • webpack4.15.1 学习笔记(八) — 缓存(Caching)
    目录输出文件名(OutputFilenames)缓存第三方库将js文件放到一个文件夹中 webpack打包模块化后的应用程序,会生成一个可部署的/dist目录,只要/dist目录中的内......
  • TypeScript 入门自学笔记(一)
    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14542005.html 目录码文不易,转载请带上本文链接,感谢~https://www.cnblogs.com/echoyya/p/14......
  • Electron小白入门自学笔记(一)
    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14297176.html 目录码文不易啊,转载请带上本文链接呀,感谢感谢https://www.cnblogs.co......
  • Electron入门Demo之桌面应用计算器笔记(二)
    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14307996.html 目录码文不易啊,转载请带上本文链接呀,感谢感谢https://www.cnblogs.co......
  • 可视化 — D3学习笔记小小案例记录一下
    D3全称是Data-DrivenDocuments数据驱动文档,是一个开源的javascript库,可以用于数据可视化图形的创建,该库更接近底层,与g2、echarts不同,d3能直接操作svg,所以拥有极大的自......
  • 快速构建 Spark 核心知识体系
    大家好,我是梦想家Alex。今天想跟大家聊一聊关于Spark学习的问题。对于很多大数据初学者,亦或者希望转行大数据的同学而言,会发现你无论选择哪个方向,不论是离线,实时,还是数......
  • 大神博客【学习笔记】
    ​​蜗窝科技​​​​http://www.wowotech.net/​​GitHub的RK平台大声:​​https://github.com/dearsq/Note-xiaoshujiang/tree/master/Android​​吴恩达机器学习笔记:​​......
  • Kafka学习笔记(二):Topics, Partitions and Offsets
    KafkaTopicsTopics:一种特殊的数据流就像数据库中的表,但没有所有的约束可以有任意多的Topics一个Topic由它的name定义任意格式的消息格式Topic中的消息序列......