webpack能根据模块的依赖关系递归地构建一个依赖关系图,当中包含了应用程序所需要的所有模块,最后打包成一个或多个bundle.它有四个核心概念entry、output

、loader、plugin.下面介绍其基本使用:

1.新建一个webpacktest文件夹,下面新建两个文件夹分别为src、dist.

2.在终端打开webpacktest,执行npm init 初始化后目录下会多一个package.json文件,再安装Webpack包.

(1)全局安装webpack(只在该项目中用,就不用-g)

npm install -g webpack webpack-cli

(2)在src文件夹下建一个index.js作为默认的入口文件

  在index.js中写入测试代码,如下:

console.log("hello world");

(3)在package.json文件中,写入下列代码

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode development" // 写入这句代码,利用webpack进行打包,并把模式设置为 --mode development
}

模式有两种:development(打包后代码不压缩)、production(打包后代码压缩)

(4)现在在终端运行npm run build ,dist文件夹下就生成了打包好的main.js文件(dist下的main.js是默认的出口文件).

npm run build

以上是零配置的webpack。

3.在根目录下建一个webpack.config.js文件(以下简称配置文件),对webpack进行配置

(注意:每次改写配置文件,都要重新启动,才能生效)

(1)首先配置好入口和出口文件

const path = require('path');

module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js' //bundle.js是打包后在dist文件夹下生成的文件名(之前默认的是main.js),也可以改为其他的名字
}
};

现在npm run build , dist 文件下会生成一个bundle.js文件(main.js文件还在)

(2)在根目录下,新建一个index.html文件,来引用生成的bundle.js文件(测试打包是否成功),并在浏览器中打开,浏览器控制台就能显示hello world了。

但是这样每次修改src下的index.js文件后,都需要重新运行npm run build,非常麻烦。

改写package.json文件,使webpack可以实时监听src下index.js文件的变化,自动打包。

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode production -w" //只用配置上 -w
}

(3)设置hash码,解决缓存的问题

const path = require('path');

module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle[hash:8].js' //设置8位hash值
}
};

现在打包后index.html要引入dist中生成的js文件非常的麻烦,因为每次改动src下的index.js文件都会自动生成带有不同hash值的bundle.js文件.因此要安装下面的插件.

(4)安装html-webpack-plugin插件(上面的index.html引入bundle.js文件是手动引入的,这个插件可以自动引入)

作用:1.这个插件还会自动根据html模板,在dist文件下生成一个html文件2.自动引入打包后的js文件

npm i --save-dev html-webpack-plugin

在配置文件中引入

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin'); //引入插件 module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle[hash:8].js'
},
plugins: [
new HtmlWebpackPlugin({ template: './index.html' }) //实例化 并且将根目录下的index.html文件作为模板
]
};

这时候你发现,dist文件夹下,有很多之前打包生成的文件,它们不会自动清除.因此要下载下面的插件.解决这个问题.

(5)安装clean-webpack-plugin插件(清除之前的打包文件,只留下当前的打包文件)

npm install --save-dev clean-webpack-plugin

在配置文件中引入

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle[hash:8].js'
    },
    plugins: [
        new HtmlWebpackPlugin({ template: './index.html' }),
        new CleanWebpackPlugin()
    ]
};

现在打包后,之前的文件就会自动被清除了.

(6)现在还不能引入css样式,要想加载css样式,要下载style-loader、css-loader包

npm install --save-dev style-loader css-loader

在src下新建index.css文件并写入样式,并在index.js中引入该文件

在配置文件中引入插件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle[hash:8].js'
},
module: { //配置
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({ template: './index.html' }),
new CleanWebpackPlugin()
]
};

现在再次进行打包,可以在浏览器看到写入的样式已经生效了.

webpack只能解析js文件,想要解析css、图片等文件都要下载相关的插件(加载器)(参考webpack官网).解析图片要下载file-loader、url-loader。

(7)下载webpack-dev-server插件

npm install webpack-dev-server --save-dev

改写package.json文件

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --mode production -w",
"start":"webpack-dev-server --progress --open -w" //插入这行代码
}

--progress 显示进度条  --open自动打开浏览器  -w监听

在配置文件中配置

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle[hash:8].js'
},
devServer: {
inline: true, //热更新,改变文件,浏览器自动更新
port: 8000 //改变端口为8000
},
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
},
plugins: [
new HtmlWebpackPlugin({ template: './index.html' }),
new CleanWebpackPlugin()
]
};

现在运行 npm start  会显示打包的进度条(因为现在打包文件太小,可能看不到)浏览器会自动跳出窗口。

webpack的基本配置(初识)的更多相关文章

  1. webpack + vuejs 基本配置(一)

    开始之前 本文包含以下技术,文中尽量给与详细的描述,并且附上参考链接,读者可以深入学习: 1.webpack2.Vue.js3.npm4.nodejs —- 这个就不给连接了,因为上面的连接都是在你实 ...

  2. webpack react基础配置一

    简单介绍webpack react基本配置,入门型: 环境配置: 依赖nodejs,官网下载最新版的nodejs:nodejs.org/en 安装完nodejs  npm便自动集成了,通过npm安装其 ...

  3. webpack 多entry 配置

    // webpack 多entry 配置var path = require('path'); module.exports = { entry: { entry2: './entry.js', de ...

  4. react+webpack开发环境配置

    react是目前非常热门的前端框架,提倡组件化开发.所谓的组件,简单理解,就是一个独立的页面部件(包括页面模版,样式,逻辑等),它是一个独立的整体. webpack,是一个模块打包工具,其主要功能,就 ...

  5. webpack的简单配置

    本人刚开始也不会写webpack配置,刚开始在网上搜索了了一些,看的也是刚刚理解,所以准备自己写下来,已作纪念和贡献给像我一样不会配置的“童鞋”们! 1.创建webpack配置文件 在项目文件下创建一 ...

  6. Webpack 2 视频教程 019 - Webpack 2 中配置多页面编译

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  7. Webpack的基本配置

    一.优化项目结构,创建相关的文件,项目结构如下:src文件夹存放相关js文件,index.html项目的首页面,dist文件夹是webpack 打包 目录. index.js内容为: alert('我 ...

  8. webpack 4+ vue-loader 配置 (完善中...)

    webpack 4+ vue-loader 配置 写的demo,clone下来后,npm run dev即可,(此demo并未加入router) 可能会由于版本问题,配置会有些许改动,暂时都是可用的 ...

  9. [转] vue&webpack多页面配置

    前言 最近由于项目需求,选择使用vue框架,webpack打包直接使用的vue-cli,因为需要多页面而vue-cli只有单页面,所以就决定修改vue-cli的配置文件来满足开发需求. html-we ...

随机推荐

  1. JavaScript 的 URL 对象是什么?

    如果我们自己编写从URL中分析和提取元素的代码,那么有可能会比较痛苦和麻烦.程序员作为这个社会中最“懒”的群体之一,无休止的重复造轮子必然是令人难以容忍的,所以大多数浏览器的标准库中都已经内置了URL ...

  2. Java Web实现用户登录界面

    一.学习Java Web需要的技术: Java语言基础:算法基础.常用数据结构.编程规范. 掌握常见的数据结构和实用算法:培养良好的编程习惯. Java面向对象:封装.继承.多态等,面向对象程序设计, ...

  3. 【二进制枚举+LCS】Card Hand Sorting

    [二进制枚举+LCS]Card Hand Sorting 题目描述 When dealt cards in the card game Plump it is a good idea to start ...

  4. 面向VBA一维数组的实用自定义函数

    UDF.dll包含了一组实用的用户自定义函数,提供了数组处理的快速方法,可以在VB6.VBS.32位VBA中调用. 看完如下的实例代码,就明白它的用处了. Private MyUDF As New U ...

  5. winform 界面加载慢原因分析

    公司新来的开发人员,对winform开发还不是特别精通,在做个性化界面体验的时候容易出现闪烁和加载慢 闪烁的话,通过winform窗体的双缓存来解决在form 窗体中增加如下代码 protected ...

  6. QTP 表格的导入导出异常信息 笔记

    0 环境 系统环境:win7 1 操作 1.1 前言 与异常遍历结合 需要表格记录下来(读写) 代码大概跑了一下 若细节有错 请自行更改 1.2 导出 systemutil.Run "D:\ ...

  7. 64)PHP,变量的生命周期

    在20day  05 假如我目前在的地址是上面的那个index.php?p=back&c=Admin&a=check  这个请求里面申请的所有事 或者是你申请的所有变量或者是全局变量都 ...

  8. Qt QString的arg()方法的使用

    1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...

  9. Javascript面试题&知识点汇总

    问题&答案 什么时候 a ==1 && a== 2 && a==3 为 true? var a = { i: 1, toString: function () ...

  10. JDK源码看Java域名解析

    前言 在互联网中通信需要借助 IP 地址来定位到主机,而 IP 地址由很多数字组成,对于人类来说记住某些组合数字很困难,于是,为了方便大家记住某地址而引入主机名和域名. 早期的网络中的机器数量很少,能 ...