一、webpack基本安装

1、创建webpack项目目录如webpackDemo,并进入webpackDemo;

2、 在node已经安装的前提下,打开命令行控制器,输入如下命令:

npm init -y
npm install webpack webpack-cli --save-dev //安装webpack webpack-cli
(MacOS: sudo npm install webpack webpack-cli -g,sudo npm isntall webpack webpack-cli --save-dev)

命令执行结束后,会生成package.json、package_lock.json、node_modules文件。然后手动创建src目录与package.json平级,src目录下有index.html ,index.js 。

注:npm使用的是淘宝镜像,使用命令 npm install --registry=https://registry.npm.taobao.org express (临时使用);

  (MacOS 如果上面命令不生效,可以使用此命令: npm config set registry https://registry.npm.taobao.org).

二、webpack概念

1、 webpack有四个核心概念:entry(入口) 、output(输出)、loader、plugin(插件)。

entry(入口)

告诉webpack构建内部依赖图开始的模块;可以指定单入口起点文件或多入口起点文件。

module.exports = {
entry:"./src/index.js"
}

output(输出

告诉webpack输出创建的bundles,以及如何命名文件。指定编译后的输出文件路径。

const OUTPUT_FILE_NAME = "dist"
module.exports = {
entry:"./src/index.js",
output: {
filename: "[name].[contenthash:10].js", //输出文件名称, hash解决缓存问题
path: path.resolve(__dirname,'dist') //输出文件路径
}
}

loader

loader可以让webpack可以处理非JavaScript文件,webpack本身只能处理JavaScript。

webpack配置loader有两个目标:

a).  test属性,用于被对应的loader进行转换的某个和某些文件;

b).  use属性,表示进行转换时,应该使用哪个loader;

module.exports = {
output: {
filename: "[name].[contenthash:10].js", //输出文件名称, hash解决缓存问题
path: path.resolve(__dirname, OUTPUT_FILE_NAME) //输出文件路径
},
module: {
rules: [{
//整理html的img资源,
test: /\.html$/,
use: ["html-loader"]
},
{
//处理css资源
test: /\.css$/,
use: ["css-loader", "style-loader"]
},
{
//处理JS资源
test: /\.jsx?$/,
use: ['file-loader']
}]
}
}

插件plugins

loader用于转换某些类型,插件用于执行更广泛的任务。若使用一个插件,只需require(),然后添加到数组中。

module.exports = {
...,
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
hash: true
}),
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname,'dist')
}) ]
}

附全部代码:

package.json

{
"name": "webpack_demo",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"watch": "webpack --watch",
"start": "webpack --config webpack.config.js",
"build": "webpack --config webpack.config.pro.js"

},
"keywords": [],
"author": "",
"license": "ISC"
}

webpack.config.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtarctPlugin = require("mini-css-extract-plugin"); //将css从js中提取出来 const OUTPUT_FILE_NAME = "dist";
module.exports = {
entry: "./src/index.js",
output: {
filename: "[name].[contenthash:10].js", //输出文件名称,hash解决缓存问题,具体可见下面的解释
path: path.resolve(__dirname, OUTPUT_FILE_NAME) //输出文件路径
}, mode: "development", //开发环境,生产环境使用"production"
module: {
rules: [{
//整理html的img资源,
test: /\.html$/,
use: ["html-loader"]
},
{
//处理css资源
test: /\.css$/,
use: [
//将css文件整合到JS文件中
"css-loader",
//创建style标签,将样式放入
"style-loader",
// css兼容性处理:postcss-->postcss-loader postcss-preset-env
]
},
{
//处理JS资源
test: /\.js$/,
exclude: /node_modules/, //处理除了nodde_modules里的js文件
loader: 'babel-loader' //用babel-loader处理 },
{
//处理图片资源
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader']
},
{
// exclude: /\.(css|js|html)$/, //排除正则内的资源
test: /\.(png|svg|jpg|gif)$/,
// 这里是匹配条件,每个选项都接收一个正则表达式或字符串
// test 和 include 具有相同的作用,都是必须匹配选项
// exclude 是必不匹配选项(优先于 test 和 include)
// 最佳实践:
// - 只在 test 和 文件名匹配 中使用正则表达式
// - 在 include 和 exclude 中使用绝对路径数组
// - 尽量避免 exclude,更倾向于使用 include
use: ['file-loader'],
// options: {
// name: "[hash:10].[ext]" //名字太长进行截取
// }
}
]
},
resolve: {
extensions: ['.js', '.json']
}, /*
source-map:外联
inline-source-map :
*/
devtool: "source-map", //告诉webpack提供源代码 plugins: [
// 将CSS文件从JS文件中提取出来
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname, OUTPUT_FILE_NAME)
}),
new HtmlWebpackPlugin({
template: "./src/index.html"
})
], devServer: {
port: 5000, //端口号
contentBase: OUTPUT_FILE_NAME, //可访问问文件
hot: true, //开启HMR热更新
https: true, //使用https
compress: true, // 启用压缩
// proxy: {
// "/": "http://localhost:3000", //使用代理路径
// }
}, /** code splitting 代码分割
* 当单入口时,可以将 node_modules中代码单独打包成一个chunk;
* 当多入口时,提取公共文件单独打包成一个chunk;
*/
optimization: {
splitChunks: {
chunks: "all"
}
} /**
* 缓存:
* Babel缓存
* cacheDirectory:true
* -->让第二次打包更快
* 文件资源缓存:
* hash :每次webpack构建是会生成一个唯一的hash值;
* 问题:js和css使用同一个hash值,会导致缓存失效,可能值改变一个文件;
* chunkhash:根据chunk生成的hash值,如果打包来自同一个chunk,那么hash是一样的
* 问题:chunkhash是一样的,因为css是在js中被引用的,属于同一个chunk;
* contenthash:根据文件内容生成hash值,不同文件的hash值不一样;
* -->让代码上线运行缓存更好使用
*
*/ /**
* tree shaking:去除无用代码
* 前提: 1.必须使用ES6模块化 2.开启production环境
* 作用: 减少代码体积
*
* 在package.json中设置:
* sideEffects:false 所有代码都没有副作用(都可以进行tree shaking)
* 问题:可能会把css @babel/polyfill(副作用)文件干掉
* sideEffects:["*.css",".less"] 不会进行tree shaking
*/ /**
* HMR :hot module replacement 热模块
* 作用:一个模块发生变化指挥重新打包这个模块,并不重新打包所有。提高打包速度。
* 样式文件:可以通过HMR实现,style-loader已实现
* JS文件:默认不使用HMR功能-->修改JS文件代码,只能处理非入口文件。
* if(module.hot){
* module.hot.accept("index.js",()=>{
* //监听文件变化,一旦发生变法,其他地方不会重新打包,直接执行回调
* }))
* }
* Html文件:默认不使用HMR功能,同时会出问题(无需做HMR功能)
* 解决方案:修改entry入口,引入html文件
*
*
*/
}

wenpack.config.pro.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtarctPlugin = require("mini-css-extract-plugin"); //将css从js中提取出来
const OptiminizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin"); //压缩CSS
const UglifyJsPlugin = require("uglifyjs-webpack-plugin"); const OUTPUT_FILE_NAME = "dist";
module.exports = {
entry: "./src/index.js",
output: {
filename: "js/[name].[contenthash:10].js", //输出文件名称,hash解决缓存问题,具体可见下面的解释
chunkFilename: 'js/[name].[contenthash:10].bundle.js', // 依赖文件名称
path: path.resolve(__dirname, OUTPUT_FILE_NAME), //输出文件路径
publicPath: '/' // 公共路径
},
mode: "production", //生产环境
module: {
rules: [{
test: /\.html$/,
use: ["html-loader"]
},
{
test: /\.css$/,
use: [MiniCssExtarctPlugin.loader, "css-loader"]
},
{
test: /\.jsx?$/,
exclude: /node_modules/, //处理除了nodde_modules里的js文件
loader: 'babel-loader' //用babel-loader处理es6
},
{
test: /\.(png|svg|jpg|gif)$/,
use: ['file-loader'],
}
]
},
devtool: "source-map", //告诉webpack提供源代码
plugins: [
new HtmlWebpackPlugin({
template: "./src/index.html",
hash: true
}),
new MiniCssExtarctPlugin({
filename: 'css/[name].[contenthash:10].css',
path: path.resolve(__dirname, OUTPUT_FILE_NAME)
}),
/**
* optimize-css-assets-webpack-plugin 会使webpack中自带的JS压缩失效,需要重新配置UglifyJsPlugin
*/
new OptiminizeCssAssetsPlugin(),
], /** code splitting 代码分割
* 当单入口时,可以将 node_modules中代码单独打包成一个chunk;
* 当多入口时,提取公共文件单独打包成一个chunk;
*/
optimization: {
splitChunks: {
chunks: "all"
}
}
}

webpack配置打包的更多相关文章

  1. webpack配置打包vue文件

    1.首先全局安装node,和npm.检查是否安装成功 2.新建一个文件下,进入该文件夹. 前先执行 npm init -y 然后就会在文件夹下出现一个package.json文件 然后执行 npm i ...

  2. webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件

    一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...

  3. VUE 多页面打包webpack配置

      思路:多配置一个main的文件,用于webpack入口使用, 然后路由的导向也应该默认指向新组件,最后通过webpack构建出一个新的独立的html文件. 缺点:生成多个html会new出多个vu ...

  4. webpack配置自动打包重新运行npm run dev出现报错

    webpack配置自动打包重新运行npm run dev出现报错 运行npm run dev出现如下报错 Listening at http://localhost:8080(node:2328) U ...

  5. webpack项目打包配置

    webpack.config.js 文件中,其中“plugins”最为重要 var path = require("path"); const webpack = require( ...

  6. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  7. webpack入门和实战(一):webpack配置及技巧

    一.全面理解webpack 1.什么是 webpack? webpack是近期最火的一款模块加载器兼打包工具,它能把各种资源,例如JS(含JSX).coffee.样式(含less/sass).图片等都 ...

  8. Webpack配置示例和详细说明

    /* * 请使用最新版本nodejs * 默认配置,是按生产环境的要求设置,也就是使用 webpack -p 命令就可以生成正式上线版本. * 也可以使用 webpack -d -w 命令,生成用于开 ...

  9. vue-cli#2.0 webpack 配置分析

    目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-s ...

  10. webpack独立打包与缓存处理

    关于 微信公众号:前端呼啦圈(Love-FED) 我的博客:劳卜的博客 知乎专栏:前端呼啦圈 前言 先前写了一篇webpack入门的文章<webpack入门必知必会>,简单介绍了webpa ...

随机推荐

  1. Anchored Neighborhood Regression【阅读笔记】GR全局回归

    论文信息 [Anchored Neighborhood Regression for Fast Example-Based uper Resolution]-TIMOFTER, 2013, IEEE ...

  2. 2023年郑州轻工业大学校赛邀请赛yy

    这也是第一次参加几个人以组队的形式来进行答题.评比,而且这是一场线下赛,收获更是很多.题目一共有十二道,一共五个小时,我们上来也是没有头绪先做哪个,可能三个人的思路不太一样,我们最终先写了第一题,写出 ...

  3. PostgreSQL 10 文档: PostgreSQL 客户端工具

    PostgreSQL 客户端应用   这部份包含PostgreSQL客户端应用和工具的参考信息.不是所有这些命令都是通用工具,某些需要特殊权限.这些应用的共同特征是它们可以被运行在任何主机上,而不管数 ...

  4. HTML超文本标记语言4

    框架标签...等等 1.框架 <frameset> 框架标签 cols="按列划分" rows="按行划分" 格式:rows="100,* ...

  5. 【go语言】1.1.2 Go 语言的特性

    1. 简洁的语法 Go 语言的语法设计上非常简洁明了,没有复杂的继承和泛型,也没有异常处理,但这并不影响它的功能性和表达力.这使得 Go 语言容易学习和使用. 例如,以下是一个简单的 Go 函数,用于 ...

  6. 开源元数据管理平台Datahub最新版本0.10.5——安装部署手册(附离线安装包)

    大家好,我是独孤风. 开源元数据管理平台Datahub近期得到了飞速的发展.已经更新到了0.10.5的版本,来咨询我的小伙伴也越来越多,特别是安装过程有很多问题.本文经过和群里大伙伴的共同讨论,总结出 ...

  7. 利用pytorch准备数据集、构建与训练、保存与加载CNN模型

    本文的主要内容是利用pytorch框架与torchvision工具箱,进行准备数据集.构建CNN网络模型.训练模型.保存和加载自定义模型等工作.本文若有疏漏.需更正.改进的地方,望读者予以指正,如果本 ...

  8. [HDCTF2019]Maze 反汇编-花指令处理

    这是一道迷宫花指令加upx脱壳处理的题 先介绍花指令 一. 概述 花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误.错误的反汇编结果会造成破 ...

  9. 如何在达梦数据库中追踪慢SQL

    在达梦数据库中,我们可以通过开启日志记录和设置最小执行时间来追踪慢SQL.下面是具体的步骤: 1. 修改dm.ini文件 使用以下命令编辑dm.ini文件: cd /home/dmdba/dmdbms ...

  10. MySQL高级9-锁

    一.简介 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除了传统的计算资源(CPU.RAM.i/O)的挣用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性,有效性 ...