前言:

  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超级详细搭建实用前端环境的更多相关文章

  1. 初探webpack之从零搭建Vue开发环境

    初探webpack之搭建Vue开发环境 平时我们可以用vue-cli很方便地搭建Vue的开发环境,vue-cli确实是个好东西,让我们不需要关心webpack等一些繁杂的配置,然后直接开始写业务代码, ...

  2. webpack 4.x之搭建前端开发环境

    webpack是一个现代JavaScript应用程序的静态模块打包器,借用官网的一张图,它能够将一些预处理语言,js的最新语法转换成浏览器识别的内容.现在一般的前端框架都有比较成熟的脚手架,大多数对w ...

  3. [坑况]——webpack搭建前端环境踩过的坑啊

    前言 嘿哈,webpack搭建前端环境踩过的坑啊! 第一个:完全不知所措 webpack4 下面用不了HtmlWebpackPlugin 和 ExtractTextPlugin 解决方案: html- ...

  4. 利用webpack搭建的前端工程化环境

    随着webpack3.x的发布,其功能也越来越强大,很多的项目的编译打包工具也由gulp逐渐转移到webpack.最近因为项目重构考虑使用使用vue,同时想从原来的gulp切换到webpack,所以搭 ...

  5. 超级详细使用Webpack4.X 搭建H5开发环境

    超级详细使用Webpack4.X 搭建H5开发环境 会撸码的小马 关注 2018.05.29 17:17* 字数 603 阅读 6453评论 0喜欢 5 很久没弄博客了,这两天有点时间来搞一下最近在弄 ...

  6. 基于 Webpack 4 搭建 Vue 开发环境

    自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...

  7. 使用Yarn+Webpack+Babel6搭建React.js环境

    使用Yarn+Webpack+Babel6搭建React.js环境 Facebook开源的React.js已经改变了世人对前端UI的思考方式.这种基于组件方式的优势之一,就是使View更加的简单,因为 ...

  8. Qt+QGIS二次开发:开发环境搭建(超级详细)

    原文链接: 1.qgis二次开发环境搭建(超级详细) 2.QGIS开发教程(1)——QGIS开发准备工作 3.QGIS(2.18.15 源码)+Qt(5/5.9.3)+VS2015(X64)编译

  9. 从零开始使用 Webpack 搭建 Vue3 开发环境

    从零开始使用 Webpack 搭建 Vue3 开发环境 创建项目 首先需要创建一个空目录,在该目录打开命令行,执行 npm init 命令创建一个项目,这个过程会提示输入一些内容,完成后会自动生成一个 ...

随机推荐

  1. linux rz上传文件及出错解决方案

    在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...

  2. qt的共享内存

    https://blog.csdn.net/gdutlyp/article/details/50468677

  3. CSS学习摘要-布局

    注:全文摘自MDN-介绍CSS布局 CSS页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流.周边元素.父容器或者主视口/窗口的位置.在这个模块中将涉及更多关于页面布局技术的细节: 浮动 ...

  4. spring-boot默认的application.properties属性

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...

  5. JS 事件冒泡、捕获。学习记录

    作为一个转行刚到公司的新人,任务不多,这一周任务全部消灭,闲暇的一天也别闲着,悄悄的看起了书.今天写一下JS的事件冒泡.捕获. 也是今天看的内容有点多了,有些消化不了,就随手记录一下.纯属自我理解,如 ...

  6. 2017-2018-2 20165318 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165318 实验二<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计        班级:1653班        姓名:孙晓暄  ...

  7. 20165318 2017-2018-2 《Java程序设计》第一周学习总结

    20165318 2017-2018-2 <Java程序设计>第一周学习总结 教材内容学习总结 第一章主要对Java平台进行了简单的介绍,并讲解了如何搭建Java环境. Java平台概论 ...

  8. iPhone 电脑备份路径

    C:\Users\iChen\AppData\Roaming\Apple Computer\MobileSync\Backup

  9. 预备作业二——有关CCCCC语言(・᷄ᵌ・᷅)

    有关CCCCC语言(・᷄ᵌ・᷅) 下面又到了回答老师问题的时候啦-(・᷄ᵌ・᷅) 有些问题正在深思熟虑中!敬请期待近期的不间断更新! 你有什么技能比大多人(超过90%以上)更好? 针对这个技能的获取你 ...

  10. Google免费GPU使用教程(Google Colab Colaboratory)

    参考: https://www.234du.com/1154.html https://mp.weixin.qq.com/s/TGTToLYSQJui94-bQC4HIQ 注册gmail时遇到手机号无 ...