前言:

  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. 数组(list)分组、分段

    对一个list进行分组,要求控制每组中的元素个数: 1.使用切片分组: lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1] #lst可为 ...

  2. Matlab绘图——对称曲线绘制(转)

    转自 http://blog.csdn.net/lyqmath/article/details/6004885 目的:对曲线数据做对称绘制 思想:根据两曲线按a对称,则x1 + x2 = 2a的原则 ...

  3. docker学习笔记:简单构建Dockerfile【Docker for Windows】

    参考与入门推荐:https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html#autoid-0-0-9 最近学习docker,写一个简单构建Doc ...

  4. 51nod 1444 破坏道路(bfs+枚举)

    1444 破坏道路 题目来源: CodeForces 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 在某一个国家,那儿有n个城市,他们通过m条双向 ...

  5. 4-3 R语言函数 mapply

    #mapply(函数/函数名,数据,函数相关的函数) > list(rep(1,4),rep(2,3),rep(3,2),rep(4,1)) [[1]] [1] 1 1 1 1 [[2]] [1 ...

  6. python统计磁盘使用情况

    #coding:utf-8import os; def SortList(item):    return item[1]; def ReadSize(fileName):    return flo ...

  7. 关于Golang中database/sql包的学习

    go-sql-driver 请求一个连接的函数有好几种,执行完毕处理连接的方式稍有差别,大致如下: db.Ping() 调用完毕后会马上把连接返回给连接池. db.Exec() 调用完毕后会马上把连接 ...

  8. 4518: [Sdoi2016]征途

    Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜 ...

  9. Vue2+Webpack创建vue项目

    相比较AngularJS和ReactJS,VueJS一直以轻量级,易上手称道.MVVM的开发模式也使前端从原先的DOM中解放出来,我们在不需要在维护视图和数据的统一上花大量时间,只需要关注于data的 ...

  10. c++ 多态,虚函数、重载函数、模版函数

    c++三大特性:封装.继承.多态.封装使代码模块化,继承扩展已存在的代码,多态的目的是为了接口重用 虚函数实现:虚函数表:指针放到虚函数表 多态:同名函数对应到不同的实现 构造父类指针指向子类的对象 ...