Webpack 笔记

安装 webpack

前置条件安装了 node

  • 全局安装 webpack 及 webpack-cli

    • npm install -g webpack --registry=https://registry.npm.taobao.org
    • npm instal -g webpack-cli --registry=https://registry.npm.taobao.org

快速入门

  • 创建项目并初始化项目

  • 创建并配置 webpack 文件(webpack.config.js)

    // 导入 path 模块 (处理路径)
    var path = require('path');// module 模块系统对象
    // exports 配置选项
    module.exports = {// 入口文件entry: "./src/index.js",// 设置模式 development(开发模式) production 生产环境mode: "development",// 输出output: {/*__dirname: 项目的绝对路径打包后的文件存放在 dist 目录下*/path: path.resolve(__dirname, "dist"),// 设置打包后的文件名称filename: "bundle.js"}
    }
    

多入口文件时

entry: {

​ index: “./src/index.js”,

​ detail: “./src/detail.js”,

}

  • 入口文件(index.js)

    var rd = function (min, max) {return Math.floor(Math.random() * (max - min) + min);
    }document.write(rd(100, 200)+"<br/>");
    document.write(rd(100, 200)+"<br/>");
    document.write(rd(100, 200)+"<br/>");
    document.write(rd(100, 200)+"<br/>");
    document.write(rd(100, 200)+"<br/>");
    
  • 打包项目

    webpack --config webpack.config.js

开发模式下

/** ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").* This devtool is neither made for production nor for readable output files.* It uses "eval()" calls to create a separate source file in the browser devtools.* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)* or disable the default devtool with "devtool: false".* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).*/
/******/ (() => { // webpackBootstrap
/******/    var __webpack_modules__ = ({/***/ "./src/index.js":
/*!**********************!*\!*** ./src/index.js ***!\**********************/
/***/ (() => {eval("var rd = function (min, max) {\r\n    return Math.floor(Math.random() * (max - min) + min);\r\n}\r\n\r\ndocument.write(rd(100, 200)+\"<br/>\");\r\ndocument.write(rd(100, 200)+\"<br/>\");\r\ndocument.write(rd(100, 200)+\"<br/>\");\r\ndocument.write(rd(100, 200)+\"<br/>\");\r\ndocument.write(rd(100, 200)+\"<br/>\");\r\n\n\n//# sourceURL=webpack://project01/./src/index.js?");/***/ })/******/   });
/************************************************************************/
/******/
/******/    // startup
/******/    // Load entry module and return exports
/******/    // This entry module can't be inlined because the eval devtool is used.
/******/    var __webpack_exports__ = {};
/******/    __webpack_modules__["./src/index.js"]();
/******/
/******/ })()
;

生产模式下

(()=>{var r=function(r,t){return Math.floor(Math.random()*(t-r)+r)};document.write(r(100,200)+"<br/>"),document.write(r(100,200)+"<br/>"),document.write(r(100,200)+"<br/>"),document.write(r(100,200)+"<br/>"),document.write(r(100,200)+"<br/>")})();

打包项目也可以使用 npm run build

前提是在项目的 package.json 中配置好选项

打包 CSS 文件

在 src 目录下创建 css 文件(base.css),并在入口文件(index.js)中引入文件

import './base.css'
  • 配置 webpack.config.js
var path = require('path');
module.exports = {entry: "./src/index.js",mode: "development",output: {path: path.resolve(__dirname, "dist"),filename: "bundle.js"}// 配置 loader 模块module: {rules: [{// 打包 css 文件test: /\.css$/i,use: ["style-loader", "css-loader"]}]}
}

配置前需要下载插件 style loader css-loader

npm install --save-dev style-loader

npm install css-loader

  • 打包文件并启动项目

    测试方法:在生产的dist 文件中创建一个 html 文件 并将 bundle.js 引入后,打开该文件,此时可以看到 css 样式是否加载成功

打包 scss

安装 sass-loader sass

npm install sass-loader sass --save-dev

module.exports = {module: {rules: [{test: /\.s[ac]ss$/i,use: [// 3 最后把 javascript 写入到bundle.js"style-loader",// 2 再把 css 转成 javascript"css-loader",// 1 将 sass 编译为 css"sass-loader",],},],},
};

打包图片文件

安装 url-loader

npm install url-loader – save-dev

module.exports = {module: {rules: [{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {limit: 8192,},},],},],},
};

编译ES6语法

安装 babel-loader

npm install -D babel-loader @babel/core @babel/preset-env

D 等价于 save-dev

module: {rules: [{test: /\.m?js$/,// 排除 node_modules 目录下的文件exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: [['@babel/preset-env', { targets: "defaults" }]]}}}]
}

处理 html 模板

安装 html-webpack-plugin

npm i -D html-webpack-plugin

// 打包项目所需的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');//处理html模板文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');//处理dist目录多余的文件(冗余)// 处理路径的模块
var path = require("path");
// 在模块系统下进行配置
module.exports = {// 入口文件 (多文件)entry: {"index": "./src/index.js","detail": "./src/detail.js"},//  打包模式 development | productionmode: "production",// 输入设置output: {// 路径path: path.resolve(__dirname, "dist"),// 名称filename: "js/bundle-[name].js"},module:{},//  配置插件plugins: [// 处理html模板new HtmlWebpackPlugin({title: "首页", // 网页标题template: "./src/views/index.html",//网页模板filename: "index.html",// 文件名称chunks:["index"] // 添加的脚本 和entry对象下的key是一一对应!!}),new HtmlWebpackPlugin({title: "详情页",template: "./src/views/detail.html",filename: "detail.html",chunks:["detail"]}),new CleanWebpackPlugin()]
}

处理模板

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title><%=htmlWebpackPlugin.options.title%></title>
</head>
<body><h1>Hello world</h1>
</body>
</html>

完整版

// 打包项目所需的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');//处理html模板文件
const { CleanWebpackPlugin } = require('clean-webpack-plugin');//处理dist目录多余的文件(冗余)// 处理路径的模块
var path = require("path");
// 在模块系统下进行配置
module.exports = {// 1.0 入口文件 (多文件)entry: {"index": "./src/index.js","detail": "./src/detail.js"},// 2.0 打包模式 development | productionmode: "production",// 3.0 输入设置output: {// 路径path: path.resolve(__dirname, "dist"),// 名称filename: "js/bundle-[name].js"},// 4.0 配置loader模块module: {rules: [// 打包css文件{test: /\.css$/i,use: ["style-loader","css-loader"]},// 打包scss文件(sass){test: /\.s[ac]ss$/i,use: [// 3. 最后把javascript写入到 bundle.js 文件中"style-loader",// 2. 再把css转成 javascript"css-loader",// 1. 将sass编译为css"sass-loader"]},// 打包图片文件{test: /\.(png|jpg|gif)$/i,use: [{loader: 'url-loader',options: {// 1KB = 1024Bytes  // 如果图片大小限制 小于等于8192Bytes  转base64格式字符串(图片文件)// 如果超过8192Bytes 就是显示原来的图片limit: 8192}}]},// 编译ES6{test: /\.m?js$/,// 排除node_modules目录的JS文件exclude: /node_modules/,use: {loader: 'babel-loader',options: {presets: [['@babel/preset-env', { targets: "defaults" }]]}}}]},// 5.0 配置插件plugins: [// 处理html模板new HtmlWebpackPlugin({title: "首页", // 网页标题template: "./src/views/index.html",//网页模板filename: "index.html",// 文件名称chunks:["index"] // 添加的脚本 和entry对象下的key是一一对应!!}),new HtmlWebpackPlugin({title: "详情页",template: "./src/views/detail.html",filename: "detail.html",chunks:["detail"]}),new CleanWebpackPlugin()]
}

Webpack 学习笔记相关推荐

  1. webpack学习笔记1

    webpack学习笔记1:基本概念 前言: 现在在日常的开发中,webpack已经是必不可少的东西了,现在的需求基本都是用webpack对资源进行打包整合,所以打算写一点关于webpack的东西,这是 ...

  2. webpack学习笔记(三):监听文件变化并编译

    在上一篇webpack学习笔记中主要认识了webpack配置文件中相关的基础配置和命令的执行.这次学习如何在文件发生变化时自动打包编译. 首先,我们来看一下配置文件 const path = requ ...

  3. webpack学习笔记(二):认识配置和命令执行

    在上一篇webpack学习笔记中,直接在命令行中使用npx webpack对项目进行打包时所使用的配置都是默认的,入口文件默认是src目录下的index.js文件,输出文件默认是dist文件夹下的ma ...

  4. webpack学习笔记(一):认识webpack

    初识webpack 根据官网介绍, webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具.当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图 ...

  5. webpack学习笔记

    看这篇文章的学习总结. webpack工作流程: 1. 配置entry,output. output的配置要注意pubilcPath这个属性,这个属性指明在浏览器中如何加载生成的打包文件.这个属性在加 ...

  6. webpack学习笔记(六):图片打包处理

    本片文章将记录webpack中如何处理图片的打包问题.在介绍图片打包处理之前,先说明一下引入图片的三种方式: 使用背景图片:将一个包裹图片的元素的css中的background属性设置为图片路径 使用 ...

  7. 我的webpack学习笔记(二)

    前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...

  8. webpack学习笔记 (三) webpack-dev-server插件和HotModuleReplacementPlugin插件使用

    webpack-dev-server插件 webpack-dev-server是webpack官方提供的一个小型Express服务器.使用它可以为webpack打包生成的资源文件提供web服务. we ...

  9. webpack学习笔记--安装

    1 首先要安装node  Node.js 自带了软件包管理器 npm,Webpack 需要 Node.js v0.6 以上支持 2 npm install webpack -g 通常我们会将 Webp ...

  10. Webpack学习笔记(官网教程)

    参考资料:webpack官方指南 GitHub源码:https://github.com/GYQ-LQ/quinn-webpack-demo demo01 安装&起步 (GitHub) 安装 ...

最新文章

  1. 微生物组—宏基因组分析专题培训7月开课啦!北京
  2. Windows如何打包Qt程序
  3. 【python】算法引入及算法特性和时间复杂度
  4. Western Digital使用5400 rpm级硬盘使所有人感到困惑
  5. 四十三 常用内建模块 base64
  6. 矢量图标库如何引入html,Iconfont矢量图标库在网站中的使用方法
  7. 【Android基础】短信的发送
  8. 【jeecg移动开发能力】Jeecg 重磅来袭,强大移动报表配置能力,一次配置七种展现风格
  9. android系统应用程序,Android调用系统应用程序
  10. JStorm如何保证消息不丢失
  11. 白岩松谈“房闹“现象
  12. 2D空间中求线段与圆的交点
  13. 10分钟掌握运输问题(一)
  14. you need a c compiler to build uwsgi
  15. eBPF 完全入门指南.pdf(万字长文)
  16. 在Win10下安装Anaconda3,“开始”菜单目录下只有Anconda prompt怎么办
  17. Mac如何做才能彻底清理垃圾
  18. 第41章 RS-485通讯实验—零死角玩转STM32-F429系列
  19. 前端js和python后端的结合
  20. Eureka健康机制检查问题之一创建EurekaDiscoveryClientConfiguration$EurekaHealthCheckHandlerConfiguration错误

热门文章

  1. RabbitMQ-C客户端使用说明
  2. shell判断字符串为空
  3. NYOJ题目91-阶乘之和
  4. 本地mysql搭建网站_本地搭建网站时的具体步骤
  5. mysql gridview_DateGridView控件与mysql交互
  6. python部署到服务器上解析不到模块_在服务器上部署kafka-python包
  7. win10修改服务器IP,Win10系统更改本地连接ip地址的方法
  8. gamma软件linux安装图示,[转载]linux下安装GAMMA软件
  9. 服务端AppWeb与PC管理端配合使用的有关说明
  10. tp3.2 实现增删改查