webpack的基本配置和一些理解
最近花了两周的休息时间学习了webpack,能够可以编写自己项目所需要的配置文件,总体来说webpack是一种非常优秀的前端模块化的打包工具,非常值得花时间来研究学习。
什么是webpack,它的出现是为了解决什么问题?
webpack是一种可以融合各种前端新技术的平台,我们只需要简单地配置就可以使用jsx和typescript等一些前端新语法,得益于社区的发展,当我17年第一次接触webpack的时候,还都是英文文档,现在已经有很多优秀的中文入门教程和工程实践
我们开始配置我们的webpack.config.js
主要的api
1、entry(项目入口)
字符串,如entry:"./src/index.js"
数组形式: 如entry:[react, react-dom],可以把数组中的多个文件打包转换为一个chunk
对象形式,如果需要配置的是多页的应用,或者我们哟啊抽离出指定模块作为指定公共代码,需要采用这种形式,属性名是占位符[name]的值
如:
entry: {
main:'./src/index2.js',
second: './src/index2.js',
vendor:['react', 'react-dom']
}
2、output(出口文件)
会告诉webpack在哪里输出所创建的bundle.js以及如何命名
out:{
path:path.join(__dirname, './dist'),
name: 'js/bundle-[name]-[hash].js,
chunkFilename: 'js/[name].chunk.js',
publicPath:'/dist/'
}
3、module(模块的处理)
webpack只能处理js文件,浏览器也可能不识别一些最新的js语法,所以我们就要对传入的模块做一些预处理,这就涉及到了webpack的又一核心概念“loader”’
loader的作用和基本用法
webpack中,loader的配置主要在module.rules中进行,这是一个数组,每一个rule做了两件事
- 识别文件类型,来确定具体处理该数据的loader(Rule.test属性)
- 使用相关的loader对文件进行相关的操作转换(Rule.use属性)
比如我们想要处理react中的jsx语法
module: {
rules:[{
test: /(\.jsx|\.js)/, //表示匹配规则,是一个正则表达式
use:{ //表示针对匹配文件将使用处理的loader
loader: "babel-loader",
options: {
presets: ["es2015", "react"]
}
}
}]
}
常用的loader:
转换编译:script-loader, babel-loader,ts-loader,coffee-loader
处理样式:style-loader,css-loader,less-loader,sass-loader,postcss-loader
处理文件:raw--loader,url-loader,file-loader
处理数据:csv-loader,xml-loader
处理模板语言:html-loader,pug-loader,jade-loader,markdown-loader
清理和测试:mocha-loader,eslint-loader
此外还有许多loader,可以到loader文档里查询
4、plugin(loader不能做的处理都能交给plugin来做)
const CleanWebpackPlugin = require("clean-webpack-plugin")
{
...
plugin:[
new webpack.DefinePlugin({
"process.env" : {
NODE_ENV: JSON.stringify("production")
}
}),
new CleanWebpackPlugin(["js"], {
root: __dirname + "/stu/",
verbose: true,
dry: false
})
]
}
一种插件就是一种函数,通过传入不同的参数,可以实现不同的功能,webpack让人觉得难学的地方之一是哟啊自己封装plugins,对于我们大多数人来说,需要掌握的plugins并不是那么多,用的时候再查就可以
5、一些辅助开发的相关属性
devtool:打包后的代码和原始代码存在较大的差异,此选项控制是否生成以及如何生成sourcemap
devserver:通过配置devserver选项,可以开启一个本地服务器
watch:启用watch模式后,webpack将持续监听热河已经解析文件的更改,开发是开启会很方便
watchoption:用来定制watch模式的选项
performance:打包后命令行如何展示性能提示,如果超过某个大小是警告还是报错
对于webpack配置,要区分开发环境还是产环境
下面是文档的建议

我们为了避免重复应该提取公共代码
所以一般有这么几个文件
webpack.config.js
webpacl.dev.js
webpack.prod.js
webpack.common.js
此外还有单独配置babel的文件babelrc,webpack可以自动识别
如果大家想跟着配置一个webpack.config.js文件,可以参考入门webpack,看这篇就够了
还有文档可以仔细看一下webpack中文文档
webpack的基本配置和一些理解的更多相关文章
- react+webpack开发环境配置
react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...
- webpack的简单配置
本人刚开始也不会写webpack配置,刚开始在网上搜索了了一些,看的也是刚刚理解,所以准备自己写下来,已作纪念和贡献给像我一样不会配置的“童鞋”们! 1.创建webpack配置文件 在项目文件下创建一 ...
- 深入浅出 webpack 之基础配置篇
前言 前端工程化经历过很多优秀的工具,例如 Grunt.Gulp.webpack.rollup 等等,每种工具都有自己适用的场景,而现今应用最为广泛的当属 webpack 打包了,因此学习好 webp ...
- vue第二单元(webpack的配置-学习webpack的常用配置)
第二单元(webpack的配置-学习webpack的常用配置) #课程目标 掌握webpack的常用配置 掌握如何根据实际的需求修改webpack的对应配置 了解webpack-dev-server的 ...
- webpack + vuejs 基本配置(一)
开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack2.Vue.js3.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在你实 ...
- webpack react基础配置一
简单介绍webpack react基本配置,入门型: 环境配置: 依赖nodejs,官网下载最新版的nodejs:nodejs.org/en 安装完nodejs npm便自动集成了,通过npm安装其 ...
- webpack 多entry 配置
// webpack 多entry 配置var path = require('path'); module.exports = { entry: { entry2: './entry.js', de ...
- Webpack 2 视频教程 019 - Webpack 2 中配置多页面编译
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- Webpack的基本配置
一.优化项目结构,创建相关的文件,项目结构如下:src文件夹存放相关js文件,index.html项目的首页面,dist文件夹是webpack 打包 目录. index.js内容为: alert('我 ...
随机推荐
- NBUT 1107——盒子游戏——————【博弈类】
盒子游戏 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format: Submit Status Practice NBUT 110 ...
- Design Pattern理解碎片
开发封闭原则(Open-Closed Principle OCP)Software entities(classes,modules,functions etc) should open for ex ...
- Javascript模块化编程详解
在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代 ...
- Java简单验证码原理(源代码+步骤操作)
本文章一共分为五个步骤,具体操作流程如下: 一.新建名为:CheckCodeServlet的servlet类; 二.复制以下代码到新建的CheckCodeServlet类中,修改自己的包名: pack ...
- 软件测试技术lab2——Selenium上机实验
Selenium上机实验说明 1.安装SeleniumIDE插件 2.学会使用SeleniumIDE录制脚本和导出脚本 3.访问http://121.193.130.195:8080/使用学号登录系统 ...
- 【Android】6.0 添加Menu菜单组件、Intent启动活动、显式Intent、隐式Intent
1.0 在helloworld项目基础上创建活动SecondActivity: 2.0 其中main.xml: <?xml version="1.0" encoding=&q ...
- ref关键字的用法
ref 关键字通过引用(而非值)传递参数. 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中. 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换 ...
- html跨域获取数据
a.com下的a.html,需要嵌入b.com下的b.html.这时建一个静态页面c.html将c.html放到a.com服务器中.b.html在嵌入c.html.这样,将参数值传输到c.html中, ...
- android 5.0 下载编译
CM的CM-12.0版本(对应Android5.0.2): $ repo init -u https://github.com/CyanogenMod/android.git -b cm-12.0 注 ...
- C#多线程和异步(二)——Task和async/await详解(转载)
一.什么是异步 同步和异步主要用于修饰方法.当一个方法被调用时,调用者需要等待该方法执行完毕并返回才能继续执行,我们称这个方法是同步方法:当一个方法被调用时立即返回,并获取一个线程执行该方法内部的业务 ...