前端小白webpack学习(一)
俗话说得好,好记性不如烂笔头。
之前就在学习中看过webpack的教程,然而一段时间没用,火速的忘光了。写这篇博文,做个总结,也让自己以后有个地方回顾。
看webpack之前,我先去看了一下官方文档,先了解一下webpack的几个概念。我是中英文文档搀着看的,一些小地方中文文档里没写,英文文档里都给了小提示。(下面的概念是我自己翻译总计的,略渣)
- concepts
At its core, webpack is a static module bundler for modern JavaScript applications. When webpack processes your application, it internally builds a dependency graph which maps every module your project needs and generates one or more bundles.
本质上,webpack是一个为现代JavaScript应用服务静态模块打包器。当webpack处理你的程序时,它实际上是在内部生成了一个指向所有你的项目所需要的模块的依赖图,然后生成一个或多个bundle。
- 四大基本概念
entry point 显示了webpack应当使用哪个模块去开始他的附加依赖关系图。entry默认值为 ./src/index.js,也可以自定义设置。
webpack.config.js
module.exports = {
entry:'./js/main.js'
}
output属性会告诉webpack从哪里输出它创建的bundles以及怎样命名那些文件。output主输出文件默认值为./dist/main.js,其他打包生成的文件默认值为./dist。output也可被自定义设置。
webpack.config.js
const path = require('path');
module.exports = {
output:{
path:"path.join(__dirname,'dist')",
filenames:'bundle.js'
}
}
webpack自身只能解析JavaScript和JSON文件。Loader允许它去处理其他类型的文件,并将这些文件转化成你的程序可使用的模块然后添加到依赖图里去。
要注意的是,webpack的一个典型特征是能够import其他类型的文件,例如.css文件,这可能不背其他打包器或task runner所支持。但是我们认为,对于能够让开发者构建一个更加精确的依赖图来说,这些语言的扩展是很有必要的。
在webpack配置中,loader有两大属性:
- test 属性表示需要被转换的文件类型
- use属性表示转换这些文件需要被使用的loader
注意:
- loader的定义应当被定义在module.rules而不是rules下,test和use是两个必需定义的属性
- 当用正则表达式匹配文件时,最好不要加引号。例如:/.css/会告诉webpack去匹配所有以.css结尾的文件,而'/.css/'或"/.css/"只会匹配唯一一个以'.css'命名的文件。
webpack.config.js
const path = require('path');
module.exports = {
module:{
rules:[
{test:/\.css/,use:['style-loader','css-loader']}
]
}
}
loaders被用来转换某些特定类型的模块,plugins可以用来实现更广范围的任务执行例如文件的打包优化、文件管理和环境变量的注入等。
使用plugins时,你需要先require('plugins-name') 然后再将它加入到plugins数组中去。大多数plugins都是可以通过options选项定义的。你可以定义一个对象去接受它,然后通过new去多次使用。
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
module.exports = {
//该插件会生成一个以index.html为模板,并自动链接所有打包文件的HTML
plugins:[
new HtmlWebpackPlugin({template:'./src/index.html'})
]
}
设置mode变量可以让webpack的打包更好的适用于各个不同的环境。默认值为production,可选的值有development、production和none。
module.exports = {
mode:"production"
}
webpack兼容所有支持ES5的浏览器(IE8及其以下不支持)。webpack需要使用promise去import()和require.ensure()。如果你想要支持低版本的浏览器,需要下载polyfill。
webpack需要在8.x或更高的node环境下运行。
下篇开始webpack的使用。前端小白webpack学习(二)
前端小白webpack学习(一)的更多相关文章
- 前端小白webpack学习(二)
前一篇写了自我总结的webpack定义:为JavaScript服务的静态模块打包器 和几大基本概念 entry.output.plugins.loaders等.指路前端小白webpack学习(一) 下 ...
- 前端小白webpack学习(四)
.less文件与.scss文件使用与.css文件相仿 less-loader使用需要借助less插件,终端输入npm i less less-loader -D安装; sass-loader使用需要借 ...
- 前端小白webpack学习(三)
不写不知道,一写发现自己真是罗里吧嗦,尽量改进 之前写了webpack的主要概念和一些使用,今天再记一下webpack的plugins和loaders的使用 7.webpack plugins使用 例 ...
- 前端小白的学习之路html与css的较量【二】
标签的划分 块级元素 独占一行 设置 宽 高可以起作用 排列方式: 上下排列 行内元素 可以共占一行 设置 宽 高 不起作用,大小由内容决定 排列方式:左右排列 行内块 可以共占一行 可以设置宽 高 ...
- 前端小白的学习之路html与css的较量【一】
html和css的较量 web结构的组成 html标签规则 快速生成一个html html的基本结构 标签的关系 标签 标题标签 段落 图片 超链接 a 属性 a标签里面的值 字符实体 新增的标签 1 ...
- webpack前端构建工具学习总结(一)之webpack安装、创建项目
npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器 ...
- webpack前端构建工具学习总结(二)之loader的使用
Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为 ...
- webpack前端构建工具学习总结(四)之自动化生成项目中的html页面
接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...
- 【原】webpack学习笔记
之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...
随机推荐
- python + selenium WebDriver的环境配置
想试用python语言来学习selenium WebDriver,首先需要搭建一个测试环境,从python安装到浏览器插件配置的详细步骤,总结如下: 一.python环境配置 1.从官网下载最新的一个 ...
- 延迟队列DelayQueue take() 源码分析
延迟队列DelayQueue take() 源码分析 在工作中使用了延迟队列,对其内部的实现很好奇,于是就研究了一下其运行原理,在这里就介绍一下take()方法的源码 1 take()源码 如下所示 ...
- MVC模式与Servlet执行流程
##Servlet生命周期 五个部分,从加载到卸载,如同人类的出生到死亡 加载:Servlet容器自动处理 初始化:init方法 该方法会在Servlet被加载并实例化后执行 服务:service抽象 ...
- go 利用chan的阻塞机制,实现协程的开始、阻塞、返回控制器
一.使用场景 大背景是从kafka 中读取oplog进行增量处理,但是当我想发一条命令将这个增量过程阻塞,然后开始进行一次全量同步之后,在开始继续增量. 所以需要对多个协程进行控制. 二.使用知识 1 ...
- 【活动】美团技术沙龙第49期:AI在外卖场景中的最佳实践
美团技术沙龙第49期开始啦! 本次沙龙,美团外卖技术部专家会深入介绍AI在对话系统.图像处理.个性化推荐.智能营销等方向在外卖业务中的实践,希望与业界技术同学一起交流学习. 无论你从事智能搜索,或是算 ...
- abp模块生命周期设计思路剖析
abp中将生命周期事件抽象为4个接口: //预初始化 public interface IOnPreApplicationInitialization { void OnPreApplicationI ...
- Navicat Premium从远程Mysql数据库复制到本地数据库的方法
之前做在本地测试总是先去现在下一份数据库的sql,然后再在本地建一个相同的,导入sql.然后觉得有点麻烦,现在发现了一个直接远程直接复制一份到本地的方法 工具:Navicat Premium 1.先连 ...
- PHP使用递归按层级查找数据
今天主要介绍一下使用递归来按层级查找数据.原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能. ...
- 对token机制的学习和分析
token,中文意思为令牌,是用户登录后会返回的一个字符串,里面包括用户信息.登录时间等,但是是加密过的密文,其加解密方式由后端决定. 在登录之后的接口请求中,前端需在请求中统一加上token,从而识 ...
- python中基本类型的连接组合和互相转换13种方式
本篇总结了一下字符串,列表,字典,元组的连接组合使用和类型的互相转换小例子,尤其列表中的extend()方法和字典中的 update方法非常的常用. 1.连接两个字符串 a = "hello ...