webpack安装_初识webpack
文中的操作均在 webpack3 版本的情况下操作。
什么是webpack?
webpack 是一个模块打包器,在 webpack 看来,前端的所有资源文件都会作为模块处理。它将根据模块的依赖关系进行静态分析,生成对应的静态资源。
四个核心概念
entry
入口起点,指示 webpack 应该使用哪个模块来作为构建其内部依赖图的开始。
output
输出,告诉 webpack 在哪里输出它所创建的 bundles,以及如何命名这些文件,默认值为 ./dist。
loader
让 webpack 能去处理那些非 JavaScript 文件。
- webpack 本身只能加载 js/json 模块,如果非要加载其他文件,则需要使用对应的 loader 进行加载/转换
- loader 本身也是运行在 node.js 环境中的 JavaScript 模块
- loader 本身是一个函数,接收源文件作为参数,返回转换的结果
- 一般以 xxx-loader 命名,xxx 代表这个 loader 要做的转换功能,比如:json-loader
plugins
插件,用于执行范围更广的任务。插件的范围包括,从打包优化和压缩,一直到重新定义环境中的变量。插件一般可以完成一些 loader 不能完成的功能,通常在 webpack 的配置信息 plugins 中指定。
- CleanWebpackPlugin:自动清除指定文件夹资源
- HtmlWebpackPlugin:自动生成 html 文件
- UglifyJSPlugin:压缩 js 文件
文件夹命名
src
源代码,存放程序员开发的最原始的代码。
build
简单的编译并合并原始代码。
dev
开发环境部署,将代码在服务器上跑起来,需要自己配置的服务器。
dist
最终经过编译、语法检查、压缩等操作之后的代码,最终给生产环境的代码。
开启项目
1 初始化项目
npm init
2 安装 webpack
npm install webpack@3 -g
全局安装
npm install webpack@3 --save-dev
局部安装
3 编译一个 js 文件
webpack src/js/index.js build/index.js
创建核心文件 webpack.config.js
1 通过 Common.js(module.exports) 暴露出去一个对象
2 定义四个关键概念 entry、output、module、plugins
3 在终端输入 webpack src/js/index.js build/index.js 即可将 src 文件夹下的index.js 的文件以及其依赖打包成 build 文件夹下的 index.js 中。
使用 less-loader 解析 less 文件
1 安装 less-loader
npm install --save-dev less-loader less
2 安装 css/style-loader
npm install css-loader style-loader --save-dev
3 向rules中写入配置:
{test: /.less$/,use: [// 创建一个style标签,将js中的css放入其中{ loader: "style-loader" },// 将css以CommonJs语法打包到js中{ loader: "css-loader" },// 将less转换成css{ loader: "less-loader" }]
}
4 在入口 js 中引入 less 文件
import '../less/demo.less';
使用 file-loader 处理图片资源
1 安装 file-loader
npm install --save-dev file-loader
2 新增 loader
{test: /.(png|jpg|gif)$/,use: [{loader: 'file-loader',options: {outputPath: 'images/', //决定输出文件的位置publicPath: '../images/', // css资源路径图片name: '[hash:5].[ext]' // 文件名称截取 hash值的前五位 }}]
}
url-loader 处理图片资源&base64
1 安装 url-loader
npm install --save-dev url-loader
2 修改 loader
{test: /.(png|jpg|gif)$/,use: [{loader: 'url-loader',options: {outputPath: 'images/', //决定输出文件的位置publicPath: '../images/', // css资源路径图片name: '[hash:5].[ext]', // 截取 hash值的前五位limit: 8192 // 8kb大小以下的图片文件都用base64处理}}]
}
使用插件提取css,合并为单独的文件
1 安装 ExtractTextWebpackPlugin插件
npm install --save-dev extract-text-webpack-plugin
2 引入插件
const ExtractTextPlugin = require("extract-text-webpack-plugin");
3 新增 plugins 插件配置项
plugins: [//提取css为单独文件new ExtractTextPlugin("./css/index.css"),
]
4 修改 less-loader
{test: /.less$/,use: ExtractTextPlugin.extract({fallback: "style-loader",use: ["css-loader","less-loader"]})
}
js语法检查和转化
1 安装 jshint-loader
npm install --save-dev jshint-loader
2 安装 js-hint
npm install jshint --save-dev
3 新增 loader
{test: /.js$/, // 涵盖 .js 文件enforce: "pre", // 预先加载好 jshint loaderexclude: /node_modules/, // 排除掉 node_modules 文件夹下的所有文件use: [{loader: "jshint-loader",options: {//jslint 的错误信息在默认情况下会显示为 warning(警告)类信息//将 emitErrors 参数设置为 true 可使错误显示为 error(错误)类信息emitErrors: false,//jshint 默认情况下不会打断webpack编译//如果你想在 jshint 出现错误时,立刻停止编译//请设置 failOnHint 参数为truefailOnHint: false,// 设置 ES 版本esversion: 6}}]
}
es6 转 es5
1 安装 babel-loader
npm install babel-loader babel-core babel-preset-es2015 --save-dev
2 安装 babel/core
npm install babel-loader@7 --save-dev
3 新增 loader
{test: /.js$/,exclude: /(node_modules|bower_components)/, // 排除 node_modules 等文件夹use: {loader: 'babel-loader',options: {presets: ['es2015']}}
}
html文件的处理和清除文件夹
html 文件的处理
1 安装 HtmlWebpackPlugin
npm install html-webpack-plugin --save-dev
2 引入插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
3 新增一个插件配置项
new HtmlWebpackPlugin({// html文档中的title标签(页签名字)title: "project-name",// 指定生成文件的名字filename: "index.html",// 生成文件所用的模板(程序员自己写的页面)template: "./src/index.html"
})
清除文件夹
1 安装 clean-webpack-plugin
npm install clean-webpack-plugin --save-dev
2 引入插件
const CleanWebpackPlugin = require('clean-webpack-plugin');
3 新增一个插件配置项
new CleanWebpackPlugin()
build 环境的搭建
1 新建 common 文件夹
2 移动 webpack.config.js 到文件夹 config 中,并改名为 webpack.build.js
3 在 package.json 中自定义命令 build
"build": "webpack --display-modules --config ./config/webpack.build.js"
4 使用 npm run build 运行上述命令
5 修改 output 中的 path
resolve(__dirname, '../build')
dev 环境的搭建
1 在 build 配置文件的基础上,增加 dev-server,跟 plugins、entry等同级
2 安装 dev-server
npm i webpack-dev-server@2 --save-dev
3 在 package.json 中自定义命令 dev
"dev": "webpack-dev-server --config ./config/webpack.dev.js"
4 使用 npm run dev 运行上述命令
5 配置 devServer
devServer: {// 模块热更新hot: true,// 自动打开浏览器open:true,// 开发服务器端口号port:3001,// 启用gzipcompress:true
}
因为热模替换只支持使用 loader 处理的文件,不支持使用插件。因此启用 HMR 需要做以下操作:
- 引入webppack:const webpack = require('webpack');
- 追加一个插件:new webpack.HotModuleReplacementPlugin()
- css 替换成 loader 的方式加载,dev 模式下会将 css 合并成一个单独的文件并引入
- 安装 html-loader:npm i html-loader --save-dev
- 将配置文件中的入口文件追加 html 文件为入口文件:entry: ['./src/js/index.js', './src/index.html']
注:热模替换只是对css的局部刷新,更新js或html相当于触发了F5刷新按钮;而且dev方式的运行是加载在内存中的,没有任何输出。
提取公共代码实现复用
1 参考 webpack.build.js 新增 webpack.common.js
2 安装合并库 merge
npm i webpack-merge --save-dev
3 将文件合并
module.exports = merge(common,{当前文件所有配置})
4 webpack.common.js 处理
- 删除 css-loader
- 删除 CleanWebpackPlugin
- 删除 ExtractTextPlugin插件
- 删除相关引用
5 webpack.build.js 处理
- 引入 const common = require('./webpack.common')
- 引入merge库:const merge = require('webpack-merge')
- 删除 入口、出口配置
- 删除 loader 中的 图片处理、js语法检查、ES6转换
- 删除插件中的 HtmlWebpackPlugin
6 webpack.dev.js 处理
- 引入 const common = require('./webpack.common')
- 引入merge库:const merge = require('webpack-merge')
- 删除 出口 配置
- 删除 loader 中的 图片处理、js语法检查、ES6转换
- 插件只保留 HotModuleReplacementPlugin
prod 环境的搭建
1 复制 webpack.build.js 改名为 webpack.prod.js
2 package.json 配置
"prod": "webpack --display-modules --config ./config/webpack.prod.js"
3 使用 npm run prod 运行上述命令
4 修改 出口配置
path: resolve(__dirname, '../dist'), filename: './js/[name].[hash:10].js'
5 修改 css 配置
new ExtractTextPlugin("./css/[name].[hash:10].css")
6 压缩 js
- 使用插件 UglifyjsWebpackPlugin
- 引入 webpack:const webpack = require('webpack')
- 插件中新增配置:new webpack.optimize.UglifyJsPlugin({sourceMap:true})
- 追加一个配置(与plugins,entry同级):devtool:'source-map'
7 css 扩展前缀
- 安装 postcss-loader:npm i --save-dev postcss-loader
- 修改 css-loader:use: ["css-loader","postcss-loader","less-loader"]
- 在根目录新建 postcss.config.js,内容为:
module.exports = {"plugins": {"autoprefixer": {"browsers": ["ie >= 8","ff >= 30","chrome >= 34","safari >= 7","opera >= 23"]}}
}
- 修改 loader
{test: /.css$/,use: ExtractTextPlugin.extract({fallback: "style-loader",use: ['css-loader', 'postcss-loader']})
}
- 安装所需的 autoprefixer:npm i autoprefixer --save-dev
8 压缩 css
- 安装 less-plugin-clean-css 插件:npm i less-plugin-clean-css --save-dev
- 引入插件:const CleanCSSPlugin = require("less-plugin-
clean-css")
- 替换 use 中的 less-loader 为对象
{loader: "less-loader", options: {plugins: [new CleanCSSPlugin({ advanced: true })]}
}
9 压缩 html
- 复制 webpack.common.js 中的 HtmlWebpackPlugin
- 追加一个配置项:minify:{ removeComments:true, collapseWhitespace:true}
webpack安装_初识webpack相关推荐
- git 创建webpack项目_使用webpack手动创建一个完整项目的全过程
1.创建文件夹"webpack-study" 2.使用webstrom打开文件夹所在位置.在根目录上创建一个文件,文件命名为"src",在src文件下新建css ...
- 结合webpack配置_前端 Webpack 工程化的最佳实践
作者 | 阿里文娱前端开发专家 芃苏责编 | 屠敏头图 | CSDN 下载自视觉中国 引言 ▐ 前端构建工具的演变 回想在2015-2016年的时候,开发者们开始渐渐把视线从大量使用Task Runn ...
- Webpack安装及简易webpack项目配置(4.0以上版本)
一开始照着书上的敲,怎么也run不起来,说缺少webpack-cli.就从网上找"补救方法",然,在我这里都不管用,索性还是看中文官方文档,瞬间run起来了,舒服.毕竟第一次跑通, ...
- 当下常用的webpack版本_细说 webpack系列 1. 为什么要选择 webpack
大家好!我是萝卜,webpack作为目前最流行的构建工具,几乎成为前端同学武器库中必备的工具之一,写这个系列文章的用意就是想把自己在平时工作中使用webpack的一些经验和心得和大家分享,也是对自己这 ...
- clickhouse安装_初识ClickHouse——安装与入门
前言: 久闻 ClickHouse 大名,一直没有去详细了解.近期看了下 ClickHouse 相关文档,决定安装体验下.想了解 ClickHouse 的小伙伴可以一起跟着学习哦.本篇文章主要介绍 C ...
- sklearn 安装_初识sklearn
我的主业是互联网运营,业余的python爱好者,学习python已经快两年,主攻网络爬虫与数据分析,爬虫能使用代理ip.打码平台.OCR识别.基本的js逆向处理反爬:数据分析主要使用pandas与py ...
- webpack笔记一:webpack的介绍,安装,加载css、图片、字体等
写在前面的话: 在当前grunt.gulp.webpack成为日常工具的情况下,如果你还只是熟练的使用html.css和激块瑞的话,已经远远不能满足项目的需求,所以你得变强,你需要懂得更多.现在前端不 ...
- 安装truffle的前提条件(nodejs和npm),truffle的webpack案例测试,webpack项目中的报错
truffle安装 Ubuntu20.04下truffle相关组件版本如下: Truffle v5.2.4 (core: 5.2.4) Solidity v0.5.16 (solc-js) Node ...
- webpack笔记_(1)_webpack 安装
webpack不仅可以解析jsx,也可以将es6转换为es5语法. 最终,它把这些代码都打包成一个叫bundle.js的文件,我们在html文件中只引入这么一个js文件就可以了! 打包后,引用的语法 ...
- npm全局安装_安装webpack
安装Webpack前的准备工作: 1. 由于 webpack 执行打包压缩时依赖 nodeJS,先确保你的系统安装了nodeJS 5.0.0 及以上的版本. 2. 因为 npm 是 nodeJS 平台 ...
最新文章
- 记录理解程度、一篇至少读3遍,吴恩达建议这样读论文!
- python读取文件第n行-Python实现读取文件最后n行的方法
- Visual C++ 中的重大更改
- MOSS 2010 实现域账户 组员在线交流 Live Chat
- 扛并发主力军,引入应用层缓存
- apache camel_REST与Apache Camel
- setmonth_日期setMonth()方法以及JavaScript中的示例
- Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
- html5获取地理位置信息API
- Linux下更换jdk和配置环境变量
- python id函数 引用本身地址_Python 之引用
- matlab交通标志神经网络识别,一种应用于交通标志识别的深度卷积神经网络方法与流程...
- 小米机器如何无root激活XPOSED框架的流程
- 医学统计python之ROC比较:Delong test
- 电脑通信端口带感叹号,如何解决网络适配器里黄色感叹号
- VUE使用vue-tree-color组件实现组织架构图(递归数据,简单明了)
- 函数调用计算最高分及对应的学生学号
- 3084. 超级变变变
- 《设计中的色彩心理学》
- 光纤传输设备学习资料:12路Base Camera link 全景影像复合光纤传输设备
热门文章
- Atititt hi dev eff db op Spring JDBC	 目录 1. Spring JDBC	2	1 1.1. Atitit 数据库db insert 插入数据data 最佳实践
- Atitit 常用数据类型有哪些 目录 1.1. 数值类型 整数 小数 自增整数	1 1.2. 货币类型	1 1.3. 字符类型 字符串	2 1.4. 日期/时间类型 时间戳	2 1.5. Ur
- Atitit 架构的艺术 目录 1. 按照技术站分类	1 1.1. LAMP架构,到IOE架构,再到分布式架构	1 1.2. Ssh ssm	1 2. Bs cs web hybrid架构	1 3.
- Atitit hibernste5 注解方式开发总结 目录 1. 映入hb5的jar 建立项目	1 1.1. 建表tab1 ,这里使用了sqlite数据库	1 1.2. 建立映射实体类tab1
- Atitit 软件与开发的未来趋势 attilax总结 1.1. Sdx软件重构世界 软件定义未来	1 1.2. 《软件和信息技术服务业发展规划(2016-2020年)》(	2 1.3. Iot物联
- Atitit需求文档模板大纲目录 attilax总结
- paip. erlang语法C++语法对比attilax总结
- PAIP.paip.手机离线ROOT过程总结
- 第九届中国开源黑客松活动将于2019年4月18日-4月20日,在深圳举办
- 谷歌android q 安装,谷歌修复了Pixel智能机安装Android Q Beta 4后循环重启的bug