核心概念(四个)

  1. Entry(入口)
  2. Output(出口)
  3. Loaders()来处理其他类型的资源文件
  4. Plugins(插件)

1.入口(Entry)

作用:代码的入口,打包的入口,单个或多个,

示例一:传入文件路径

module.exports = {
entry:' index.js '
}

示例二:传入一个数组,   向entry属性传入[ 文件路径数组 ] 将创建 " 多个主入口(multi-main entry) "

module.exports = {
entry:[ ' index.js ' ,' wendor.js ' ]
}

示例三:传入对象(推荐具体看webpack的API)  ,与前两样不同的是,前两种方式entry指定的是一个属性,也可以是元素对象,entry是一个代码块(tank),使用对象的方式有几个好处:很容易增加一个入口,方便

module.exports = {
entry:{
index: ' index.js '
}
}

2.出口(output)

作用:打包生成的文件(bundle)    一个或多个   自定义规则

在 webpack 中配置 output 属性的最低要求是,将它的值设置为一个对象,包括以下两点:

  • filename 用于输出文件的文件名。
  • 目标输出目录 path 的绝对路径

示例一:最简单的用法 表示 打包后的inde.min.js文件将输出到/home/proj/public/assets目录下

module.exports = {
entry: ' index.js ',
output: {
filename:' index.min.js ' ,
path: '/home/proj/public/assets '
} }

示例二:多个入口起点(如果配置创建了多个单独的"chunk",应该使用占位符来确保每个文件具有唯一的名称)

{
entry: {
app: './src/app.js',
search: './src/search.js'
},
output: {
filename: '[name].js',
path: __dirname + '/dist'
}
} // 写入到硬盘:./dist/app.js, ./dist/search.js

3.Loaders(要定义在module.rules中)

作用:Loader是让webpack处理除了非JS文件(webpack本身只能理解JS文件),loader可以把所有类型的文件转为webpack能够处理的有效模块.

在webpack的配置中loader有两个目标:

  1. test属性,用于标识出应该被对应的 loader 进行转换的某个或某些文件。
  2. use 属性,表示进行转换时,应该使用哪个 loader。

示例一:当webpack编译器遇到在[require()/import语句]被解释为''.txt"的路径,在打包之前要使用[raw-loader]转换一下

const path = require('path');
const config = {
output: {
filename: 'my-first-webpack.bundle.js'
},
module: {
rules: [
{ test: /\.txt$/, use: 'raw-loader' }
]
}
};
module.exports = config;

示例二:因为Loaders是是对模块源码的转换,所以有时候要先安装需要转换的文件,再在module.rules里面设置

Step1:安装对应的loader,例如需要加载CSS文件,typescript文件

npm install --save-dev style-loader
npm install --save-dev css-loader
npm install --save-dev ts-loader

Step2:指示webpack对应遇到文件需要调用一下的loader

module: {
rules: [
{
test: /\.css$/,
use: [
{ loader: 'style-loader' },
{
loader: 'css-loader',
options: {
modules: true
}
}
]
}.
{ test: /\.ts$/, use: 'ts-loader' }
]
}

总结常用的Loader

编译相关:Babel-loader   ts-loader

样式相关:style-loader  css-loader  less-loader   postcss-loader

文件相关:file-loader  url-loader

4.插件( Plugins )

作用:参与打包整个过程 打包优化与压缩 配置编译时的变量  极其灵活,插件目的在于解决loader无法是实现的事

用法:插件可以携带参数/选项,需要在webpack配置种,向plugins属性传入new实例

Step1:安装插件(html-webpack-plugin为例)

npm install html-webpack-plugin

Step2:配置

const HtmlWebpackPlugin = require('html-webpack-plugin'); //通过 npm 安装
const webpack = require('webpack'); //访问内置的插件
const path = require('path'); const config = {
entry: './path/to/my/entry/file.js',
output: {
filename: 'my-first-webpack.bundle.js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
use: 'babel-loader'
}
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin(),
new HtmlWebpackPlugin({template: './src/index.html'})
]
}; module.exports = config;

总结常用的插件

优化相关:

    CommonsChunkPlugin  提取不同chunk之间到那时有相同的代码的提取出单独的chunk(代码块)

    UglifyjsWebpackPlugin 压缩代码

功能相关  ExtractTextWebpackPlugin  CSS可以提取出来做一个单独的文件,提取出到打包成单独CSS文件

HtmlWebpackPlugin  用来生成HTML的

HotModuleReplacementPlugin  模块更新的插件

CopyWebpackPlugin    帮助拷贝文件

什么是Chunk? Chunk(打包前)也就是代码块,在webpack中打包会默认把这些代码分成一个个代码块

什么是Bundle?Bundle也就是打包过以后,的代码

什么是Module?loader把一个个文件转化为模块,loaders处理完就是module(模块)

webpack学习2.3webpack核心概念的更多相关文章

  1. webpack的四个核心概念介绍

    前言 webpack 是一个当下最流行的前端资源的模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后 ...

  2. Elasticsearch学习之基本核心概念

    在Elasticsearch中有许多术语和概念 1. 核心概念 Elasticsearch集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包 ...

  3. Docker 学习笔记之 核心概念

    Docker核心概念: Docker Daemon Docker Container Docker Registry Docker Client 通过rest API 和Docker Daemon进程 ...

  4. Webpack 一些核心概念了解

    Webpack的几个核心概念 Entry:入口,Webpack执行构建的第一步将从Entry开始,可抽象成输入. Module:模块,在Webpack里一切皆模块,一个模块对应一个文件.Webpack ...

  5. webpack学习(一)起步安装

    起步   webpack 用于编译 JavaScript 模块.一旦完成安装,你就可以通过 webpack 的 CLI 或 API 与其配合交互.如果你还不熟悉 webpack,请阅读核心概念和打包器 ...

  6. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

  7. webpack核心概念

    一.webpack四个核心概念 1.入口[Entry] webpack将创建所有应用程序 依赖关系图表.图表的起点被称之为 入口起点.入口起点告诉webpack从哪里开始,并遵循着依赖关系图表知道打包 ...

  8. JAVA入门(1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则)

    主要内容: 1.JAVA平台应用 2.核心概念:JVM,JDK,JRE 3.搭建JAVA开发环境 4.学习JAVA的原则 JAVA的平台应用 JAVA的平台应用分为3个部分: 一.JAVA SE,主要 ...

  9. 通过核心概念了解webpack工作机制

    webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency gr ...

随机推荐

  1. 移动端viewport模版

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta cont ...

  2. node中mysql和短信使用方法(3)

    一.mysql的使用 使用mysql首先得有数据库并且表里面有数据,我创建了数据库newsql,里面Tables有表company等等. company有id,name,other等字段 1.导入my ...

  3. 基于loghub的消息消费延迟监控

    我们可以把loghub当作一个消息中间件来使用.如果能知道当前的消费进度,自然好了,否则消费情况一无所知,总是有点慌! loghub消费分两种情况,一是普通消费,二是消费组消费: 消费组消费,logh ...

  4. 科学使用Log4View2

    目录 目录 前言 科学使用 编辑和调试程序集 调试程序集 编辑程序集 结语 推荐文献 目录 NLog日志框架使用探究-1 NLog日志框架使用探究-2 科学使用Log4View2 前言 这个标题很低调 ...

  5. 【Android - 控件】之可悬浮列表StickyHeadersRecyclerView

    这是timehop的GitHub上发表的一个控件框架,大家可以去参考它的[GitHub]. 这里先贴出GitHub上提供的效果图: 要使用这个框架,我们需要首先导入它的依赖: compile 'com ...

  6. js基础-函数-var和let的区别

    javaScript简介 javaScript历史 1995年,Netscape公司是凭借Navigator浏览器成为当时第一代互联网公司. 网景公司希望在HTML界面上加一点动态效果,于是叫Bren ...

  7. 网络层 IP

    网络层 -- 数据包 网络层作用 解决什么问题? 在讲网络层之前,其实基于广播的这种通信就可以实现全世界通信了,你吼一声,如果全世界是一个局域网,全世界的计算机肯定可以听得见,从理论上似乎行得通,如果 ...

  8. 队列&生产者消费者模型

    队列 ipc机制:进程通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁 queue from multiprocessing import Process,Queue ### 案例一 q ...

  9. Chrome插件安装的3种方法,解决拖放不能安装的情况,并提供插件下载

    本文摘录于Chrome插件网站 方法一:拖放安装 下载插件的crx文件后,打开Chrome的扩展页面(chrome://extensions/或按Chrome菜单图标>更多工具>扩展程序) ...

  10. VLAN实验1(VLAN基础配置及Access接口)

    本实验基于<HCNA网 络技术实验指南> 本实验使用eNSP软件 原理概述: 早期的局域网技术是基于总线型结构的.总线型拓扑结构是由一根单电缆连接着所 有主机,这种局域网技术存在着冲突域问 ...