【webpack系列】webpack4.x入门配置基础(一)
一、前言
webpack在不断的迭代优化,目前已经到了4.29.6。在webpack4这个版本中,做了很多优化,引入了很多特性,将获得更多模块类型,.mjs支持,更好的默认值,更为简洁的模式设置,更加智能的chunk,新增的splitChunks来自定义分隔代码块等等。升级待4,在打包速度,代码体积,数量,以及运行效率上有一个飞跃。
二、安装webpack4最基础入门
2.1首先初始化npm 项目,npm init初始化,生成package.json
node版本建议8.2以上
npm init -y
npm i webpack webpack-cli webpack-dev-server -D
npm i -D是npm install --save-dev 的缩写,是安装模块并保存到package.json的devDependencies中,主要是开发环境的依赖包。
2.2新建src/index.js 和 dist/index.html
2.3webpack4是零配置
在使用webpack进行打包的时候,默认情况下会将src下的入口文件(index.js)进行打包。
可以直接在终端中输入命令webpack
将当前的内容进行一个简单的打包。
这样dist文件夹下面多了一个main.js文件。
但是有一个黄色警告,mode是webpack中独有的,两种打包环境,一个是开发环境:development,另外一个是生产环境:production。
打包的时候,输入webpack --mode=development或者webpack --mode=production就不会出现警告提示了。
下面是webapck --mode=production
命令打包,这个是代码压缩过的,细心的朋友应该也发现打包后小了很多。
2.4新建config/webpack.config.js创建文件
在 webpack v4 中,可以无须任何配置,然而大多数项目会需要很复杂的设置,这就是为什么 webpack 仍然要支持 配置文件。这比在 terminal(终端) 中手动输入大量命令要高效的多,所以让我们创建一个配置文件:
进入到webpack.config.js文件中进行配置,具体在代码中注释(这里简单的一些,具体的下面会给大家)
const path = require("path");
module.exports = {
mode: 'development',
/*入口文件配置*/
entry: {
main: './src/index.js'
},
/*出口文件配置*/
output: {
/*打包路径*/
path: path.resolve(__dirname, '../dist'),
/*打包文件名称*/
filename: "main.js"
},
/*模块:例如解读css,图片转换,压缩*/
module: {
},
/*插件,用于生产的各种功能*/
plugins: [
],
/*配置webpack开发服务的功能*/
devServer: {
}
}
现在不能执行之前的webpack --mode="development"命令了会报下面的错误。
这里是因为webpack4打包默认找的src下面的index.js入口,我们前面已经删除了,现在这里src下面是main.js文件,所以找不到就报ERROR in Entry module not found: Error: Can't resolve './src'
ERROR in Entry module not found: Error: Can't resolve './src' in 'E:\2019github\resume'错误。
所以这里我们到package.json里面配置下命令,让打包的时候执行我们在config/webpack.dev.js下面配置的入口。
2.5package.json配置命令
执行npm run build
现在配置打包时候的入口文件以及出口文件,很多朋友看webpack.dev.js中的注释。入口是./src/main.js
打开index.html
注意:
1、如果你使用的是 npm 5,你可能还会在目录中看到一个 package-lock.json
文件。
以上就是最基础的webpack4的搭建。
三、管理资源
在 webpack 出现之前,前端开发人员会使用 grunt 和 gulp 等工具来处理资源,并将它们从 /src
文件夹移动到 /dist
或 /build
目录中。
像 webpack 这样的工具,将动态打包所有依赖(创建所谓的 依赖图(dependency graph))。
webpack 最出色的功能之一就是,除了引入 JavaScript,还可以通过 loader 引入任何其他类型的文件。
3.1 加载css
在js模块中,import 一个css文件,你需要安装style-loader和css-loader,并在配置文件中添加这些loader。
npm i style-loader css-loader --save-dev
webpack.config.js中
const path = require("path");
module.exports = {
mode: 'development',
/*入口文件配置*/
entry: {
main: './src/index.js'
},
/*出口文件配置*/
output: {
/*打包路径*/
path: path.resolve(__dirname, '../dist'),
/*打包文件名称*/
filename: "main.js"
},
/*模块:例如加载css,图片转换,压缩*/
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
},
/*插件,用于生产的各种功能*/
plugins: [
],
/*配置webpack开发服务的功能*/
devServer: {
}
}
webpack 根据正则表达式,来确定应该查找哪些文件,并将其提供给指定的 loader。在这个示例中,所有以 .css
结尾的文件,都将被提供给 style-loader
和 css-loader
。
通过在项目中添加一个新的 style.css
文件,并将其 import 到我们的 index.js
中:
在src/index.js
import _ from 'lodash'
import './css/index.css'
function component() {
let ele = document.createElement('div');
ele.innerHTML = _.join(['你好,2019,saucxs','webpack']);
return ele
}
document.body.appendChild(component());
现在运行 build 命令:
查看后发现:
注意:在多数情况下,你也可以进行 CSS 提取,以便在生产环境中节省加载时间。最重要的是,现有的 loader 可以支持任何你可以想到的 CSS 风格 - postcss, sass 和 less 等。
3.2 加载image图像
假想,现在我们正在下载 CSS,但是像 background 和 icon 这样的图像,要如何处理呢?使用 file-loader,我们可以轻松地将这些内容混合到 CSS 中:
npm install file-loader --save-dev
webpack.config.js
const path = require("path");
module.exports = {
mode: 'development',
/*入口文件配置*/
entry: {
main: './src/index.js'
},
/*出口文件配置*/
output: {
/*打包路径*/
path: path.resolve(__dirname, '../dist'),
/*打包文件名称*/
filename: "main.js"
},
/*模块:例如加载css,图片转换,压缩*/
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.(png|svg|jpg|jpeg|gif|webp)$/,
use: [
'file-loader'
]
}
]
},
/*插件,用于生产的各种功能*/
plugins: [
],
/*配置webpack开发服务的功能*/
devServer: {
}
}
在使用 css-loader 时,如前所示,会使用类似过程处理你的 CSS 中的 url('./my-image.png')
。loader 会识别这是一个本地文件,并将 './my-image.png'
路径,替换为 output
目录中图像的最终路径。而 html-loader 以相同的方式处理 <img src="./my-image.png" />
。
我们向项目添加一个图像,然后看它是如何工作的,你可以使用任何你喜欢的图像:
src/index.js
import _ from 'lodash'
import './css/index.css'
import sau from './img/sau.jpg'
function component() {
let ele = document.createElement('div');
ele.innerHTML = _.join(['你好,2019,saucxs','webpack']);
var image = new Image();
image.src = sau;
ele.appendChild(image)
return ele
}
document.body.appendChild(component());
src/css/index.css
body{
color: pink;
background: url('../img/sau.jpg');
}
重新构建并再次打开 index.html 文件
果一切顺利,你现在应该看到你的 sau.jpg图标成为了重复的背景图,以及文本旁边的 img
元素。如果检查此元素,你将看到实际的文件名已更改为 e2c11146949c08b542c068aefc0c1d7b.jpg。这意味着 webpack 在 src
文件夹中找到我们的文件,并对其进行了处理!
3.3 加载字体
像字体这样的其他资源如何处理呢?file-loader 和 url-loader 可以接收并加载任何文件,然后将其输出到构建目录。这就是说,我们可以将它们用于任何类型的文件,也包括字体。让我们更新 webpack.config.js
来处理字体文件:
webpack.config.js
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
'file-loader'
]
}
【webpack系列】webpack4.x入门配置基础(一)的更多相关文章
- webpack4入门配置
下面是抄过来的,方便自己翻越 webpack4.x入门配置 1.首先npm install webpack webpack-cli webpack-dev-server -g (mac电脑用超级管 ...
- webpack4 入门配置研究
1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir ...
- webpack4.41.0配置一(基础配置webpack文件,入口出口,实现打包)
1.查看node.js版本.npm版本和webpack版本(使用webpack4时,请确保node.js的版本>=8.9.4) 2.我先重新卸载了webpack和webpack-cli(全局) ...
- 【webpack 系列】基础篇
Webpack 基础篇 基本概念 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每 ...
- 【webpack系列】从零搭建 webpack4+react 脚手架(四)
经过三个章节的学习,你已经学会搭建了一个基于webpack4的react脚手架.如果要更改配置,比如,你希望把编译后的js文件和css文件等单独放dist下的static目录下,你想想,是不是有点麻烦 ...
- 【webpack系列】从零搭建 webpack4+react 脚手架(三)
本章节,我们对如何在脚手架中引入CSS,如何压缩CSS,如何使用CSS Modules,如何使用less,如何使用postcss等问题进行展开学习. 1 支持css (1)在app目录,新建一个css ...
- 【webpack系列】从零搭建 webpack4+react 脚手架(二)
html文件如何也同步到dist目录?bundle.js文件修改了,万一被浏览器缓存了怎么办?如何为导出的文件加md5?如何把js引用自动添加到html?非业务代码和业务代码如何分开打包?如何搭建开发 ...
- Go基础系列:channel入门
Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 channel基础 chann ...
- webpack快速入门——配置JS压缩,打包
1 .首先在webpack.config.js中引入 const uglify = require('uglifyjs-webpack-plugin'); 2.然后在plugins配置里 plugin ...
随机推荐
- 微信小程序把玩(十六)form组件
原文:微信小程序把玩(十六)form组件 form表单组件 是提交form内的所有选中属性的值,注意每个form表单内的组件都必须有name属性指定否则提交不上去,button中的type两个subm ...
- 零元学Expression Blend 4 – Chapter 20 以实作案例学习Childwindow
原文:零元学Expression Blend 4 – Chapter 20 以实作案例学习Childwindow 本章将教大家如何运用Blend 4内建的假视窗原件-「ChildWindow」 Chi ...
- C# 获取当前月份天数的三种方法总结
方法一: //最有含量的一种 int days = System.Threading.Thread.CurrentThread.CurrentUICulture.Calendar.GetDaysInM ...
- mysql5.7.18 初始化和运行
比如你下载的mysql位于目录:E:\dbms\mysql下 ---该目录下文会用到. 如果你有mysql应用经验,你肯定配置过my.ini文件,比如修改IP或者Port等信息: 如果你从未用过mys ...
- C#高性能大容量SOCKET并发(十一):编写上传客户端
原文:C#高性能大容量SOCKET并发(十一):编写上传客户端 客户端封装整体框架 客户端编程基于阻塞同步模式,只有数据正常发送或接收才返回,如果发生错误则抛出异常,基于TcpClient进行封装,主 ...
- Android实现简单音乐播放器(startService和bindService后台运行程序)
Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有 ...
- qtchooser - a wrapper used to select between Qt development binary(2种方法)
---------------------------------------------------------------------------------------------------- ...
- Android无布局文件下自定义通知栏notification的 icon
在开发项目一个与通知栏有关的功能时,由于自己的项目是基于插件形式的所以无法引入系统可用的布局文件,这样无法自定义布局,造成无法自定义通知栏的icon. 在网上也有一种不用布局文件更换icon的方法,但 ...
- Vista之前的版本,默认本地登陆用户都以管理员权限启动程序
Vista之前的版本,默认本地登陆用户都以管理员权限启动程序,之后的OS版本默认都没有管理员权限,需要用户提权才能做某些操作,否则需要管理员权限的操作都会失败MSSQL是用户名账号连接,Socket方 ...
- 剖析Qt的事件机制原理(源代码级别)
在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使Qt程序进入消息循环.下面我们就到exec()函数内部,来看一下他的实现原理.Let's go ...