俗话说得好,好记性不如烂笔头。

之前就在学习中看过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有两大属性:

  1. test 属性表示需要被转换的文件类型
  2. use属性表示转换这些文件需要被使用的loader

注意:

  1. loader的定义应当被定义在module.rules而不是rules下,test和use是两个必需定义的属性
  2. 当用正则表达式匹配文件时,最好不要加引号。例如:/.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学习(一)的更多相关文章

  1. 前端小白webpack学习(二)

    前一篇写了自我总结的webpack定义:为JavaScript服务的静态模块打包器 和几大基本概念 entry.output.plugins.loaders等.指路前端小白webpack学习(一) 下 ...

  2. 前端小白webpack学习(四)

    .less文件与.scss文件使用与.css文件相仿 less-loader使用需要借助less插件,终端输入npm i less less-loader -D安装; sass-loader使用需要借 ...

  3. 前端小白webpack学习(三)

    不写不知道,一写发现自己真是罗里吧嗦,尽量改进 之前写了webpack的主要概念和一些使用,今天再记一下webpack的plugins和loaders的使用 7.webpack plugins使用 例 ...

  4. 前端小白的学习之路html与css的较量【二】

    标签的划分 块级元素 独占一行 设置 宽 高可以起作用 排列方式: 上下排列 行内元素 可以共占一行 设置 宽 高 不起作用,大小由内容决定 排列方式:左右排列 行内块 可以共占一行 可以设置宽 高 ...

  5. 前端小白的学习之路html与css的较量【一】

    html和css的较量 web结构的组成 html标签规则 快速生成一个html html的基本结构 标签的关系 标签 标题标签 段落 图片 超链接 a 属性 a标签里面的值 字符实体 新增的标签 1 ...

  6. webpack前端构建工具学习总结(一)之webpack安装、创建项目

    npm是随nodeJs安装包一起安装的包管理工具,能解决NodeJS代码部署上的很多问题: 常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器 ...

  7. webpack前端构建工具学习总结(二)之loader的使用

    Webpack 本身只能处理 JavaScript 模块,如果要处理其他类型的文件,就需要使用 loader 进行转换. Loader 可以理解为是模块和资源的转换器,它本身是一个函数,接受源文件作为 ...

  8. webpack前端构建工具学习总结(四)之自动化生成项目中的html页面

    接续上文:webpack前端构建工具学习总结(三)之webpack.config.js配置文件 插件的介绍文档:https://www.npmjs.com/package/html-webpack-p ...

  9. 【原】webpack学习笔记

    之前在react的项目中有用过webpack,不过没有认真的去研究,这段时间又重新好好的学习一下webpack,发觉 webpack是一个很强大的东西.而且很好用,方便,接下来主要是做一下学习的笔记 ...

随机推荐

  1. maven打包mapper.xml打不进去问题

    <resources> <resource> <directory>src/main/java</directory> <includes> ...

  2. 【CentOS7】开发环境配置

    [CentOS7]开发环境配置 目录 ===================================================================== 1.安装openjdk ...

  3. cannot resolve symbol AppCompatActivity

    记一次配置性的问题 今天复习自定义控件的时候新建一个project,生成的代码冒红,可把我给郁闷了.我知道我的配置是正确的,可是... 它出现了cannot resolve symbol AppCom ...

  4. 《Java基础知识》Java数据类型以及变量的定义

    Java 是一种强类型的语言,声明变量时必须指明数据类型.变量(variable)的值占据一定的内存空间.不同类型的变量占据不同的大小. Java中共有8种基本数据类型,包括4 种整型.2 种浮点型. ...

  5. 准确率、精确率、召回率、F-Measure、ROC、AUC

    先理解一下正类(Positive)和负类(Negetive),比如现在要预测用户是否点击了某个广告链接,点击了才是我们要的结果,这时,点击了则表示为正类,没点击则表示为负类. TP(True Posi ...

  6. 防止 window.open 被拦截

    window.open('/app/dashbuilder.html?' + group.id, '_blank'); // 一般_self不会被拦截 // 改为 let newTab = windo ...

  7. 小程序 wx.request请求

    1.wx.request相当于发送ajax请求 微信官方解释 参数 属性 类型 默认值 必填 说明 url string 是 开发者服务器接口地址 data string/object/ArrayBu ...

  8. 3、看源码MVC中的Controllr的Json方法

    无论ViewResult还是JsonResult都继承ActionResult,ActionResult里只有一个方法ExecuteResult 1.Controllr的Json方法 实际上是new ...

  9. AVProVideo 在android 真机使用经验分享

    AVProVideo 在 android 方面 如果想使用必须进行合理的设置:如图 发布的时候设置: 如果想使用代码替换播放视频: 第一步:设置  PlatformOptionsAndroid.ove ...

  10. Linux Bash文本操作之sed篇其二

    上一篇总结了sed的基础应用(Linux Bash文本操作之sed篇其一),内容实在有够多,这里再对稍微高级一些的用法做一个整理,以方便使用时查阅. 查看文本内容 示例1表示在第一到第四行匹配到的行后 ...