[webpack]-webpack超级详细搭建实用前端环境
前言:
webpack 超级实用前端环境搭建
一、我们日常使用的前端开发环境应该是怎样的?
- 构建我们需要发布的html,css ,js 文件
- 使用css 预处理器来编写样式
- 处理压缩图片
- 使用Bable支持ES新特性
- 本地提供静态环境开发调试
二、关联HTML
webpack 默认从作为入口的 .js 文件进行构建(更多是基于 SPA 去考虑),但通常一个前端项目都是从一个页面(即 HTML)出发的,最简单的方法是,创建一个 HTML 文件,使用 script 标签直接引用构建好的 JS 文件
<script src="./dist/bundle.js"></script>
但是,如果我们的文件名或者路径会变化,so 我们使用 html-webpack-plugin 插件
html-webpack-plugin 是一个独立的 node package,所以在使用之前我们需要先安装它,把它安装到项目的开发依赖中:
npm install html-webpack-plugin -D
然后在 webpack 配置中,将 html-webpack-plugin 添加到 plugins 列表中:(默认版配置)
cosnt HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
//...
Plugins:[
new HtmlWebpackPlugin (),
]
}
然而默认配置,并没有什么用哦。这时候我们需要一个实践项目版
const HtmlWebpackPlugin = require('html=webpack-plugin')
module.exports = {
//...
Plugins:[
new HtmlWebpackPlugin ({
filename:'index.html' //配置输出文件名和路径
template:'assets/index.html' ,//配置文件模板
}),
],
}
嘿,我们实际项目怎么可能只有一个HTML文件了。这时候我们再来一个 多个页面版
官方提供的例子是这样的
const HtmlWebpackPlugin = require('html=webpack-plugin')
module.exports = {
//...
Plugins:[
new HtmlWebpackPlugin ({
filename:'index.html' //配置输出文件名和路径
template:'assets/index.html' ,//配置文件模板
}),
new HtmlWebpackPlugin ({
filename:'address.html' //配置输出文件名和路径
template:'assets/index.html' ,//配置文件模板
}),
],
}
到这里,应该满足大部分需求了,但但但是,,,,,, 我还想提供另外一种。
webpack的入口文件是多个的,生成多个HTML文件。不废话 上代码
const HtmlWebpackPlugin = require('html-webpack-plugin)
var entries = './src/entry/**/**/*.js' //多入口文件
//敲黑板
for(var pathname in entries){
var conf ={
filename:"dist/pages/"+ pathname + ".html",
template:'index.html' ,
hash:false
}
webpackConfig.plugins.push(new HtmlWebpackPlugin(conf))
}
三、构建css
嘻嘻,我们在编写css,并且希望使用webpack来进行构建,为此我们需要配置中引入loader来解析和处理css 文件,嘿朋友要记得安装 style-loader和css-loader 哦
module.exports = {
module: {
rules: [
// ...
{
test: /\.css/,
include: [
path.resolve(__dirname, 'src'),
],
use: [
'style-loader',
'css-loader',
],
},
],
}
}
那就创建一个index.css 文件,并在index.js 中引用它,然后进行构建呀
//在index.js 中哦
import './index.css'
发现运行和没有瞧见index.css 啊(有点急人啊)
- css-loader 负责解析 CSS 代码,主要是为了处理 CSS 中的依赖,例如 @import 和 url() 等引用外部文件的声明;
- style-loader 会将 css-loader 解析的结果转变成 JS 代码,运行时动态插入 style 标签来让 CSS 代码生效。
经由上述两个 loader 的处理后,CSS 代码会转变为 JS,和 index.js 一起打包了。如果需要单独把 CSS 文件分离出来,我们需要使用 extract-text-webpack-plugin 插件。
const ExtactTextPlugin = reuire('extact-text-plugin')
module.exports = {
//...
module:{
rules:[
{
test:/\.css$/,
// 因为这个插件需要干涉模块转换的内容,所以需要要使用它对应的loader
use:ExtractTextPlugin.extrract({
fallbac:'style-laoder',
use:'css-loader',
})
}
]
},
plugins:[
// 引入插件,配置文件名,可以使用hash
new ExtracttextPlugin('index.css'),
],
}
可要注意了,实际项目不会只有一个css文件呀。
ExtractTextPlugin 对 每个入口 chunk 都生成一个对应的文件,所以当你配置多个入口 chunk 的时候,你必须使用 [name], [id] 或 [contenthash]
//贴出官方给的多个实例的代码
const ExtractTextPlugin = require('extract-text-webpack-plugin'); // 创建多个实例
const extractCSS = new ExtractTextPlugin('stylesheets/[name]-one.css');
const extractLESS = new ExtractTextPlugin('stylesheets/[name]-two.css'); module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: extractCSS.extract([ 'css-loader', 'postcss-loader' ])
},
{
test: /\.less$/i,
use: extractLESS.extract([ 'css-loader', 'less-loader' ])
},
]
},
plugins: [
extractCSS,
extractLESS
]
};
四、css 预处理器
在上述使用 CSS 的基础上,通常我们会使用 Less/Sass 等 CSS 预处理器,webpack 可以通过添加对应的 loader 来支持,以使用 Less 为例,我们可以在官方文档中找到对应的 loader。
嘿,我是用less.
那我们在webpack配置中,添加一个支持解析后缀为.less的文件
module.exports = {
// ...
module: {
rules: [
{
test: /\.less$/,
// 因为这个插件需要干涉模块转换的内容,所以需要使用它对应的 loader
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: [
'css-loader',
'less-loader',
],
}),
},
],
},
// ...
}
五、处理图片文件
在前端项目的样式中总会使用到图片,虽然我们已经提到 css-loader 会解析样式中用 url() 引用的文件路径,但是图片对应的 jpg/png/gif 等文件格式,webpack 处理不了。是的,我们只要添加一个处理图片的 loader 配置就可以了,现有的 file-loader 就是个不错的选择。
module.exports = {
// ...
module: {
rules: [
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'file-loader',
options: {},
},
],
},
],
},
}
六、font 类型处理
来来来 说到这里 我说一个坑:升级了element UI 框架 总是报错,我去font 没有处理
module.exports = {
// ...
module: {
rules: [
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
},
],
},
],
},
}
七、使用Babel
Babel 是一个让我们能够使用 ES 新特性的 JS 编译工具,我们可以在 webpack 中配置 Babel,以便使用 ES6、ES7 标准来编写 JS 代码。
module.exports = {
// ...
module: {
rules: [
{
test: /\.jsx?/, // 支持 js 和 jsx
include: [
path.resolve(__dirname, 'src'), // src 目录下的才需要经过 babel-loader 处理
],
loader: 'babel-loader',
},
],
},
}
八、启动静态服务
我们完成了处理多种文件类型的 webpack 配置。我们可以使用 webpack-dev-server 在本地开启一个简单的静态服务来进行开发
在项目下安装 webpack-dev-server,然后添加启动命令到 package.json 中:
"scripts": {
"build": "webpack --mode production",
"start": "webpack-dev-server --mode development"
}
哇,到最后啦
运行 npm run start
http://localhost:8080/
后言:
在多页面项目下使用Webpack+Vue 了解一下,很详细的介绍了每一个配置,我们项目实际开发用到的(剥离,剥离出来)
https://github.com/FannieGirl/Build-a-development-environment
[webpack]-webpack超级详细搭建实用前端环境的更多相关文章
- 初探webpack之从零搭建Vue开发环境
初探webpack之搭建Vue开发环境 平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码, ...
- webpack 4.x之搭建前端开发环境
webpack是一个现代JavaScript应用程序的静态模块打包器,借用官网的一张图,它能够将一些预处理语言,js的最新语法转换成浏览器识别的内容.现在一般的前端框架都有比较成熟的脚手架,大多数对w ...
- [坑况]——webpack搭建前端环境踩过的坑啊
前言 嘿哈,webpack搭建前端环境踩过的坑啊! 第一个:完全不知所措 webpack4 下面用不了HtmlWebpackPlugin 和 ExtractTextPlugin 解决方案: html- ...
- 利用webpack搭建的前端工程化环境
随着webpack3.x的发布,其功能也越来越强大,很多的项目的编译打包工具也由gulp逐渐转移到webpack.最近因为项目重构考虑使用使用vue,同时想从原来的gulp切换到webpack,所以搭 ...
- 超级详细使用Webpack4.X 搭建H5开发环境
超级详细使用Webpack4.X 搭建H5开发环境 会撸码的小马 关注 2018.05.29 17:17* 字数 603 阅读 6453评论 0喜欢 5 很久没弄博客了,这两天有点时间来搞一下最近在弄 ...
- 基于 Webpack 4 搭建 Vue 开发环境
自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...
- 使用Yarn+Webpack+Babel6搭建React.js环境
使用Yarn+Webpack+Babel6搭建React.js环境 Facebook开源的React.js已经改变了世人对前端UI的思考方式.这种基于组件方式的优势之一,就是使View更加的简单,因为 ...
- Qt+QGIS二次开发:开发环境搭建(超级详细)
原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译
- 从零开始使用 Webpack 搭建 Vue3 开发环境
从零开始使用 Webpack 搭建 Vue3 开发环境 创建项目 首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 ...
随机推荐
- 全自动LTI部署OS
全自动LTI部署OS:零.通过ADK制作WinPE(需包含有imagex.exe工具,用来捕获映像)一.使用WinPE中的imagex捕获映像(install.wim)二.使用MDT制作启动映像(bo ...
- 64位操作系统下调用32位com的问题
Hello Guys! I am trying to create a simple VBS script to automatically open some .tif images from a ...
- Memcached与Redis对比,Redis基础笔记回顾
Memcached 1.为什么要把数据存入内存?快 2.Memcached和Redis的区别 (1)Memcached缓存.Redis数据库,Memcached不支持持久化到磁盘 (2)Redis提供 ...
- 面向对象程序设计_Task5_Calculator1.5.0
The 3rd part of the Calculator program _ FILE I/O 题目链接:第五次作业(计算器第三步) github链接:Calculator_1.5.0 第五次作业 ...
- HDU 5550 - Game Rooms(DP + 前缀和预处理)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=5550 题意: 一个大楼有n(2≤n≤4000)层,每层可以建一个乒乓球房或者一个游泳房,且每种房间在大楼 ...
- 使用Discuz!自带参数防御CC攻击以及原理
CC攻击确实是很蛋疼的一种攻击方式,Discuz!的配置文件中已经有了一个自带的减缓CC攻击的参数,在配置文件config.inc.php中: $attackevasive = 0; // 论坛防御 ...
- python面试题库——1Python基础篇
第一部分 Python基础篇(80题) 为什么学习Python? 语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做 Python和Ja ...
- Python自动化之clean方法前端调用clean方法的错误
obj.non_field_errors.0 源代码: NON_FIELD_ERRORS = '__all__' 如果在前端写 obj.errors.__all__.0直接就会报错 所以经过尝试得知, ...
- kubernetes dns 初步理解和使用 dnsmasq dns服务器跟host机器同步
1.安装DNS后,pod就可以通过dns来解析service,从而实现通信 2.创建一个dns测试工具pod apiVersion: extensions/v1beta1 kind: Deployme ...
- FFMpeg笔记(一) 使用FFmpeg将任意格式图片转换成任意格式图片
void SrcToDest(char* pSrc, char* pDest,unsigned int nSrcWidth, unsigned int nSrcHeight, AVPixelForma ...