webpack-dev-server:静态资源目录配置

news/2024/12/5 6:30:10/

目录

webpack-dev-server

Webpack项目-配置自动打包

访问错误信息分析

简单配置静态资源访问目录

完整配置静态资源访问目录

 directory属性

staticOptions属性

publicPath属性

serveIndex属性

 watch属性

完整配置webpack.config.js示例

默认显示index.html内容配置

 默认显示静态资源目录配置


webpack-dev-server

        webpack-dev-server可以为前端应用提供自动打包的功能支持,其使用介绍在Webpack官网文档-配置/DevServer部分,也可查看GitHub项目中的介绍。以下所使用的webpack、webpack-cli、webpack-dev-server版本信息如下。

         自带development server(前端服务)的Webpack-dev-server提供了实时重载(就像Vue前端项目,每次修改之后保存,就会自动更新页面效果)的功能,GitHub文档规定:This should be used for development only.(仅在开发中进行使用)。可以理解为这个development server前端服务就是在模拟项目部署时的那个后端服务容器(如:nginx、Tomcat等)。

Webpack项目-配置自动打包

        在开发中,如果使用了Webpack从零构建前端项目,那么,若想实现类似于Vue项目的自动打包效果,就可以为其引入Webpack-dev-server依赖,安装命令如下,

# -D表示将其放入开发环境依赖下(记录到package.json的devDependencies节点下)
npm install webpack-dev-server -D

        接着,修改package.json文件的scripts节点,添加启动命令,

# 2-修改package->scripts配置
"scripts":{"dev":"webpack-dev-server"
}

        之后,使用命令“npm run dev”即可启动一个前端服务,这个服务就面向于这个Webpack前端应用。

         最后,我们访问地址:http://localhost:8080/,即可看到Webpack前端应用的静态资源目录列表,

 访问错误信息分析

        当然,以上只是理想效果。也可能你会看到如下这样的错误提示,

     

        其原因是:没有正确在webpack项目的配置文件中正确配置webpack-dev-server的静态资源目录。如何理解呢?看如下红框部分,提示:webpack-dev-server的Content内容来自D盘下的一个目录,但是这个public目录在磁盘中是不存在的。

 简单配置静态资源访问目录

        以上已经提到,问题出现的原因就是因为:没有正确配置webpack-dev-server的静态资源目录。换句话说,该项配置会告诉服务器从哪里提供内容 ,当我们访问http://localhost:8080/路径时,它就会自动到D盘下.../public中抽取静态资源,但是由于找不到任何内容,就会出现Cannot GET /访问不到的错误提示。

        以下,我们先看一下webpack官网文档中的介绍,

        如上图,static配置项(String或者Object类型)可以帮我们解决这个问题,我们先简单做如下配置,告诉前端服务将从根目录下的src子目录中抽取静态资源文件,

const path = require("path")
module.exports = {mode: `production`,//`development`, //指定构建模式-[1]development模式下,不会进行代码压缩与混淆;[2]production模式下,会进行代码压缩与混淆entry: path.resolve(__dirname,`src/index.js`), //指定入口文件output: {path: path.resolve(__dirname,`dist`), //输出文件路径filename: `main.bundle.js`, //输出文件名称charset: true, //输出文件的编码`utf-8`clean: true, //在生成新的打包输出之前清空path对应的dist目录},//配置webpack-dev-server,支持自动打包devServer:{static:`./src/`, //允许配置从跟目录下提供静态文件}
}
根目录/src目录中的内容

         我们重新打包,看到红框中已经提示了:静态资源Content来自于./src/子目录中,这表示我们的配置已经生效了。

注意红框内容

        接着,我们再次访问路径:http://localhost:8080/,看到index.html的内容就被渲染出来了。

配置后的效果

完整配置静态资源访问目录

        以上是简单配置的版本,接下来我们看一看如何通过Object对象来配置devServer.static配置项。 我们继续看Webpack官网文档的介绍。

        首先,注意到Object类型的devServer.static对应如下集合属性,因此,关键在于对着5个属性的正确配置。

 directory属性

        如上图所示,这个选项其实就是刚才我们在简化版配置中静态资源服务目录的配置,可以看到它的默认值是:path.join(process.cwd(), 'public')。这里的process.cwd()如何理解呢?我们直接在webpack.config.js文件中进行console.log打印操作,看一下它的输出内容。

         可以看到,这里path.join(process.cwd(), 'public')的结果,就是上面最开始的默认访问路径:D:\GIS_workspace\framework\webpack-demo\public

staticOptions属性

               staticOptions属性对应静态文件的一些高级配置,对应Object类型。可参考Express框架的API使用文档:Express 4.x - API Reference。具体属性截图如下,

         这里的大致是对前端服务接口请求的一些配置,例如:redirect重定向、index默认索引文件配置、setHeaders请求头配置等等。

        举个例子:我们知道,在vue项目中都有一个index.html文件,但是,当我们将其名称修改之后,程序还能正常运行吗?我们来尝试一下,将其改为index1.html,启动项目,看一下具体的效果。

         它其实是可能会报错的,尤其是当我们在index.html直接引入了某些开发依赖的时候,这是因为此时应用找不到默认的index.html文件,依赖没有被正常引入。而这里的staticOptions的index属性,就是在做这样的默认检索文件名的配置。

publicPath属性

       此属性控制如何访问静态资源目录的内容,如果配置为:/abc,那么就要通过:http://localhost:8080/abc/路径访问。

serveIndex属性

         此属性就是我们一开始谈到的——如何控制显示目录列表的问题相关了。

 watch属性

         watch属性是控制:当开发者在修改了项目文件时,是否重新加载页面内容的配置项。对应布尔类型,默认是true-开启状态。

完整配置webpack.config.js示例

默认显示index.html内容配置

const path = require('path')console.log(process.cwd())module.exports = {mode: `production`, //`development`, //指定构建模式-[1]development模式下,不会进行代码压缩与混淆;[2]production模式下,会进行代码压缩与混淆entry: path.resolve(__dirname, `src/index.js`), //指定入口文件output: {path: path.resolve(__dirname, `dist`), //输出文件路径filename: `main.bundle.js`, //输出文件名称charset: true, //输出文件的编码`utf-8`clean: true, //在生成新的打包输出之前清空path对应的dist目录},//配置webpack-dev-server,支持自动打包devServer: {static: {directory: `./src/`, //允许配置从跟目录下提供静态文件staticOptions: {redirect: true, //重定向配置,默认是"/",布尔类型index: `index.html`, //设置是否在特定目录下自动检索index.html文件,默认为index.html},publicPath: `/`, //告诉服务器在哪个 URL 上提供 static.directory 的内容,默认是:'/',对应当前根目录下serveIndex: true, // 告诉开发服务器启用后使用 serveIndex 中间件,会在查看没有 index.html 文件的目录时生成目录列表watch: true, // 通过 static.directory 配置项告诉 dev-server 监听文件。默认启用,文件更改将触发整个页面重新加载},},
}

 默认显示静态资源目录配置

const path = require('path')console.log(process.cwd())module.exports = {mode: `production`, //`development`, //指定构建模式-[1]development模式下,不会进行代码压缩与混淆;[2]production模式下,会进行代码压缩与混淆entry: path.resolve(__dirname, `src/index.js`), //指定入口文件output: {path: path.resolve(__dirname, `dist`), //输出文件路径filename: `main.bundle.js`, //输出文件名称charset: true, //输出文件的编码`utf-8`clean: true, //在生成新的打包输出之前清空path对应的dist目录// publicPath: `./` ,},//配置webpack-dev-server,支持自动打包devServer: {static: {directory: `./`, //允许配置从跟目录下提供静态文件staticOptions: {redirect: true, //重定向配置,默认是"/",布尔类型index: `index.html`, //设置是否在特定目录下自动检索index.html文件,默认为index.html},publicPath: `/`, //告诉服务器在哪个 URL 上提供 static.directory 的内容,默认是:'/',对应当前根目录下serveIndex: true, // 告诉开发服务器启用后使用 serveIndex 中间件,会在查看没有 index.html 文件的目录时生成目录列表watch: true, // 通过 static.directory 配置项告诉 dev-server 监听文件。默认启用,文件更改将触发整个页面重新加载},},
}

 

 


http://www.ppmy.cn/news/13089.html

相关文章

vsftpd使用指北

vsftpd使用指北 文章目录vsftpd使用指北1.安装vsftpd2.登录3.切换本地路径下载命令:get用于下载单个文件:mget用于批量下载:上传命令:FilezillaReferencevsftpd 是“very secure FTP daemon”的缩写,是一个完全免费的、…

【JavaEE】博客前端

目录 一、列表页 1.1导航条 1.2主题区域 1.2.1个人信息框 1.2.2 内容区 二、登录页 三、详情页 一、列表页 整体布局如下: 1.1导航条 导航条分为三块,整体都设置id为导航栏,然后左右分为导航栏左和导航栏右。左边靠左,右边靠…

自媒体神器 Previs Shot 使用指南

Previs Shot 是一款影视创作的项目管理工具,更高效的方式开始您的影视创作历程。分镜表分镜表可高效绘制画面、编写景别、运镜、内容、台词等,甚至可以填写摄影器材、灯光等信息。分镜结构场景:电影里比如过生日、开party都是不同的场景&…

初识redis

1.初识Redis Redis是一种键值型的NoSql数据库,这里有两个关键字: 键值型 NoSql 其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value的形式多种多样,可以是字符串、数值、甚至json:…

【蓝桥杯】 C++ 刷题统计

文章目录题目描述输入描述输出描述实现代码注意点知识点题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题? 输入描述 输入一行包含三个…

C++动态规划超详细总结

动态规划首先来介绍一下动态规划,但我不想用过于官方的语言来介绍。动态规划是一种思想,它常用于最优解问题(即所有问题包括所有子问题的解为最优解),它有点像递推,是在已知问题的基础上解决其他问题。这种…

动态内存管理(2)

TIPS 1. scanf读取与空格: 我们都知道,scanf()在从输入缓冲区里面读取数据的时候,如果中间碰到了空格,那么就会直接停下来,而如果在最前面有个空格,直接无视空格。 2. scanf()读取与\n,如果是…

系统架构:分层架构范式

引子 系统在从0到1阶段时,为了可让产品快速上线,此时系统分层一般不是软件开发需要重点考虑的范畴,但是随着业务逐渐复杂 ,大量代码纠缠耦合,此时会出现逻辑不清楚、模块相互依赖、扩展性差、改一处动全身的问题。 系…