webpack3.10.0(入门系列基本概念1)
一、概念
webpack的核心是一个用于现代JavaScript应用程序的静态模块打包程序。当webpack处理您的应用程序时,它会递归地构建一个依赖图,其中包含应用程序所需的每个模块,然后将所有这些模块打包到一个或多个包中。
在开始学习之前我们需要了解它的四个核心概念:
- 入口(entry)
- 产量(output)
- 装载机(loader)
- 插件(plugins)
入口(entry)
入口就是整个程序打包的入口文件,入口文件里面有各种引入文件的依赖关系,进入之后,webpack会找出依赖的其他js,css等模块,下面是一个简单的entry配置示例:
在webpack.config.js(webpack默认的启动入口)
module.exports = {
entry:{
main:'./src/script/main.js',
},
};
entry里面你可以根据需求配置多个入口,示例如下
module.exports = {
entry:{
main:'./src/script/main.js',
a: './src/script/a.js',
b: './src/script/b.js',
c: './src/script/c.js'
},
};
出口(output)
输出属性告诉webpack将打包后的文件存放在哪里以及如何命名这些文件。您可以通过output在您的配置中指定一个字段来配置这一部分:
webpack.config.js
const path = require('path');
module.exports = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),//resolve是node里面path的一个方法,指向绝对路径
filename: 'my-first-webpack.bundle.js'//文件打包后的文件名
}
};
上面的代买中output.path表示文件打包后的存放路劲,output.filename表示文件打包后的文件名
切记:webpack2.0以上的版本输出文件必须设置绝对路径,不然会报错
装载机(loader)
loader的作用是能让webpack处理其他非js文件,原则上webpack只认识js文件,webpack打包时会通过loader处理文件,会把引入的文件都当做模块来处理,常见的loader有style-loader,css-loader,file-loader,url-loader,less-loader等
loader在webpack配置中有两个目的:
- test属性表示哪种类型的文件应该被转换
- use属性指示应该使用哪个加载器进行转换
webpack.config.js
const path = require('path');
const config = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
};
module.exports = config;
上面的配置rules为具有两个必需属性的单个模块定义了一个属性:test和use。这告诉webpack的编译器如下:
“嘿,webpack编译器,当你遇到一个路径,解析到一个”.txt“文件里面的一个require()/ import语句,使用它raw-loader来转换它,然后再添加到包。
插件(plugins)
虽然loader被用来转换某些类型的模块,但是插件可以用来执行更广泛的任务。插件的范围从捆绑优化和缩小到定义类似环境的变量。插件的功能是非常强大,可以用来解决各种各样的任务。
为了使用一个插件,你需要require()它并将其添加到plugins数组中。大部分插件都可以通过选项进行自定义。既然你可以在一个配置中多次使用一个插件来达到不同的目的,你需要通过调用new操作符来创建它的一个实例。
webpack.config.js
const HtmlWebpackPlugin = require('html-webpack-plugin'); //installed via npm
const webpack = require('webpack'); //to access built-in plugins
const path = require('path');
const config = {
entry: './path/to/my/entry/file.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new HtmlWebpackPlugin({template: './src/index.html'})
]
};
module.exports = config;
附上官网给出的一些插件列表https://webpack.js.org/plugins/
webpack3.10.0(入门系列基本概念1)的更多相关文章
- Entity Framework 6.0 入门系列 第一篇
Entity Framework 6.0 入门系列 第一篇 好几年前接触过一些ef感觉不是很好用,废弃.但是 Entity Framework 6.0是经过几个版本优化过的产物,性能和功能不断完善,开 ...
- ElasticSearch7.10.0入门学习
ElasticSearch完成最关键的一个功能就是 大数据搜索 官网:https://www.elastic.co/cn/elasticsearch/ 简介 Elasticsearch 是一个分布式全 ...
- Vue 2.0 入门系列(14)学习 Vue.js 需要掌握的 es6 (1)
针对之前学习 Vue 用到的 es6 特性,以及接下来进一步学习 Vue 要用到的 es6 特性,做下简单总结. var.let 与 const var 与 let es6 之前,JavaScript ...
- Vue 2.0 入门系列(15)学习 Vue.js 需要掌握的 es6 (2)
类与模块 类 es6 之前,通常使用构造函数来创建对象 // 构造函数 User function User(username, email) { this.username = username; ...
- YoyoGo微服务框架入门系列-基本概念
前言 Github开源:github.com/yoyofx/yoyogo 还请多多Star 之前简单介绍了YoyoGo微服务框架的基本内容,接下来了解下框架中的基本概念. 从一个简单Web服务Demo ...
- STM32入门系列-GPIO概念介绍
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出.STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯 ...
- Apache Shiro系列三,概述 —— 10分钟入门
一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...
- MongoDB入门系列(一):基础概念和安装
概述 MongoDB是目前非常流行的一种非关系型数据库,作为入门系列的第一篇本篇文章主要介绍Mongdb的基础概念知识包括命名规则.数据类型.功能以及安装等. 环境: OS:Windows Versi ...
- Bootstrap3.0入门学习系列
Bootstrap3.0入门学习系列规划[持续更新] 前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...
随机推荐
- “随手记”开发记录day20
练习软件的展示,尽量将软件全方面的展示给大众,希望不要像上次一样有许多遗漏的地方,让其他团队以为我们的软件没有完善的功能.
- JS 鼠标、键盘事件对象
鼠标事件对象 mouseEvent鼠标事件对象 e.clientX 在可视区的x和y的坐标 e.pageX 在页面文档的X和Y的坐标 <script> docume ...
- 16、Java中级进阶 面向对象 封装
1.封装概述 封装可以被认为是一个保护屏障,将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过类提供的方法来实现对隐藏信息的操作访问,可以有效的防止该类的代码和数据被其他类随意访问. 要访问 ...
- Java 基础 —— 注解 Annotation
简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...
- 类型SQL注入实验 Part1
准备为PHPstudy环境 <?php $id = $_GET['t']; $conn = mysql_connect("127.0.0.1","root" ...
- 关于GPU你必须知道的基本知识
图形处理单元(或简称GPU)会负责处理从PC内部传送到所连接显示器的所有内容,无论你在玩游戏.编辑视频或只是盯着桌面的壁纸,所有显示器中显示的图像都是由GPU进行渲染的. 对普通用户来说,实际上不需要 ...
- C#LeetCode刷题之#169-求众数(Majority Element)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4048 访问. 给定一个大小为 n 的数组,找到其中的众数.众数是 ...
- Vscode+Picgo+github+Markdown Preview Enhanced实现Markdown一键上传图床以及导出pdf文件
目录 安装Vscode 安装及配置Picgo插件 安装Markdown Preview Enhance 安装Vscode 安装Vscode(不解释了) 安装及配置Picgo插件 在github中新建仓 ...
- angular中常用内置过滤器
<!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...
- noip复习——线性筛(欧拉筛)
整数的唯一分解定理: \(\forall A\in \mathbb {N} ,\,A>1\quad \exists \prod\limits _{i=1}^{s}p_{i}^{a_{i}}=A\ ...