iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Webpack中publicPath使用详解
  • 441
分享到

Webpack中publicPath使用详解

2024-04-02 19:04:59 441人浏览 泡泡鱼
摘要

目录outputoutput.pathoutput.publicPathwebpack-dev-server中的publicPathhtml-WEBpack-plugintempla

最近自己在搭建一个基于webpack的React项目,遇到关于output.publicPath和webpack-dev-server中publicPath的问题,而官方文档对它们的描述也不是很清楚,所以自己研究了下并写下本文记录。

output

output选项指定webpack输出的位置,其中比较重要的也是经常用到的有path和publicPath

output.path

默认值:process.cwd()
output.path只是指示输出的目录,对应一个绝对路径,例如在项目中通常会做如下配置:


output: {
 path: path.resolve(__dirname, '../dist'),
}

output.publicPath

默认值:空字符串
官方文档中对publicPath的解释是

webpack 提供一个非常有用的配置,该配置能帮助你为项目中的所有资源指定一个基础路径,它被称为公共路径(publicPath)。

而关于如何应用该路径并没有说清楚...

其实这里说的所有资源的基础路径是指项目中引用CSSjs,img等资源时候的一个基础路径,这个基础路径要配合具体资源中指定的路径使用,所以其实打包后资源的访问路径可以用如下公式表示:

静态资源最终访问路径 = output.publicPath + 资源loader或插件等配置路径

例如


output.publicPath = '/dist/'

// image
options: {
  name: 'img/[name].[ext]?[hash]'
}

// 最终图片的访问路径为
output.publicPath + 'img/[name].[ext]?[hash]' = '/dist/img/[name].[ext]?[hash]'

// js output.filename
output: {
 filename: '[name].js'
}
// 最终js的访问路径为
output.publicPath + '[name].js' = '/dist/[name].js'

// extract-text-webpack-plugin css
new ExtractTextPlugin({
 filename: 'style.[chunkhash].css'
})
// 最终css的访问路径为
output.publicPath + 'style.[chunkhash].css' = '/dist/style.[chunkhash].css'

这个最终静态资源访问路径在使用html-webpack-plugin打包后得到的html中可以看到。所以publicPath设置成相对路径后,相对路径是相对于build之后的index.html的,例如,如果设置publicPath: './dist/',则打包后js的引用路径为./dist/main.js,但是这里有一个问题,相对路径在访问本地时可以,但是如果将静态资源托管到CDN上则访问路径显然不能使用相对路径,但是如果将publicPath设置成/,则打包后访问路径为localhost:8080/dist/main.js,本地无法访问

所以这里需要在上线时候手动更改publicPath,感觉不是很方便,但是不知道该如何解决...

一般情况下publicPath应该以'/'结尾,而其他loader或插件的配置不要以'/'开头

webpack-dev-server中的publicPath

点击查看官方文档中关于devServer.publicPath的介绍

开发阶段,我们借用devServer启动一个开发服务器进行开发,这里也会配置一个publicPath,这里的publicPath路径下的打包文件可以在浏览器中访问。而静态资源仍然使用output.publicPath。

webpack-dev-server打包的内容是放在内存中的,这些打包后的资源对外的的根目录就是publicPath,换句话说,这里我们设置的是打包后资源存放的位置

例如:


// 假设devServer的publicPath为
const publicPath = '/dist/'
// 则启动devServer后index.html的位置为
const htmlPath = `${pablicPath}index.html`
// 包的位置
cosnt mainJsPath = `${pablicPath}main.js`

以上可以直接通过Http://lcoalhost:8080/dist/main.js访问到。

通过访问 http://localhost:8080/webpack-dev-server 可以得到devServer启动后的资源访问路径,如图所示,点击静态资源可以看到静态资源的访问路径为 http://localhost:8080${publicPath}index.html

html-webpack-plugin

这个插件用于将css和js添加到html模版中,其中template和filename会受到路径的影响,从源码中可以看出

template

作用:用于定义模版文件的路径

源码:


this.options.template = this.getFullTemplatePath(this.options.template, compiler.context);

因此template只有定义在webpack的context下才会被识别,webpack context的默认值为process.cwd(),既运行 node 命令时所在的文件夹的绝对路径

filename

作用:输出的HTML文件名,默认为index.html,可以直接配置带有子目录

源码:


this.options.filename = path.relative(compiler.options.output.path, filename);

所以filename的路径是相对于output.path的,而在webpack-dev-server中,则是相对于webpack-dev-server配置的publicPath。

如果webpack-dev-server的publicPath和output.publicPath不一致,在使用html-webpack-plugin可能会导致引用静态资源失败,因为在devServer中仍然以output.publicPath引用静态资源,和webpack-dev-server的提供的资源访问路径不一致,从而无法正常访问。

有一种情况除外,就是output.publicPath是相对路径,这时候可以访问本地资源

所以一般情况下都要保证devServer中的publicPath与output.publicPath保持一致。

最后

关于webpack中的path就总结这么多,在研究关于webpack路径的过程中看查到的一些关于路径的零碎的知识如下:

斜杠/的含义

配置中/代表url根路径,例如http://localhost:8080/dist/js/test.js中的http://localhost:8080/

devServer.publicPath & devServer.contentBase

  • devServer.contentBase 告诉服务器从哪里提供内容。只有在你想要提供静态文件时才需要。
  • devServer.publicPath 将用于确定应该从哪里提供 bundle,并且此选项优先。

node中的路径

  • __dirname: 总是返回被执行的 js 所在文件夹的绝对路径
  • __filename: 总是返回被执行的 js 的绝对路径
  • process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径

参考

详解Webpack2的那些路径

浅析 nodejs 的几种文件路径

项目中关于相对路径和绝对路径的问题

到此这篇关于Webpack中publicPath使用详解的文章就介绍到这了,更多相关Webpack publicPath内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Webpack中publicPath使用详解

本文链接: https://www.lsjlt.com/news/129130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Webpack中publicPath使用详解
    目录outputoutput.pathoutput.publicPathwebpack-dev-server中的publicPathhtml-webpack-plugintempla...
    99+
    2024-04-02
  • Vue中webpack的使用详解
    目录1、什么是Webpack2、模块化的演进AMDCMDES6模块3、安装Webpack4、使用webpack总结1、什么是Webpack 本质上, webpack是一个现代Java...
    99+
    2024-04-02
  • Webpack中publicPath路径问题的示例分析
    这篇文章主要为大家展示了“Webpack中publicPath路径问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Webpack中publicPat...
    99+
    2024-04-02
  • webpack安装配置及使用教程详解
    目录一、webpack介绍1、由来2、介绍3、作用4、拓展说明5、webpack整体认知二、webpack安装1、安装node2、安装cnpm3、安装nrm的两种方法4、安装webp...
    99+
    2024-04-02
  • webpack-dev-middleware详解
    webpack-dev-middleware是一个用于在开发环境下运行webpack的中间件。它将webpack打包后的文件传递给一...
    99+
    2023-09-21
    详解
  • webpack项目中使用vite加速的兼容模式详解
    目录前言目的要处理的问题动手共用 index.html共用配置兼容环境变量自动导入资源引入svg-sprite-loader 替代方案其他效果前言 随着公司前端工程越来越大,启动是无...
    99+
    2024-04-02
  • webpack中的代理配置详解
    目录作用:使用场景一:使用场景二使用场景三使用场景四:使用场景五:解决跨域原理vue-cli中proxyTable配置接口地址代理示例更多参数作用: 1.解决开发环境跨域问题(不用再...
    99+
    2024-04-02
  • NodeJs使用webpack打包项目的方法详解
    目录WebpackWebPack的使用第一步:初始化项目:npm init -y第二步:新建 src/index.html第三步:安装模块Jquery npm i...
    99+
    2024-04-02
  • webpack中的optimization配置示例详解
    webpack配置optimization minimizerruntimeChunknoEmitOnErrorssplitChunks 主要就是根据不同的策略来分割打包出来的bun...
    99+
    2023-02-23
    webpack配置optimization webpack optimization
  • vue中如何使用webpack require.ensure
    这篇文章主要为大家展示了“vue中如何使用webpack require.ensure”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中如何使用webpac...
    99+
    2024-04-02
  • 使用typescript+webpack构建一个js库的示例详解
    目录入口文件tsconfig配置webpack配置文件webpack入口文件配置webpack为typescript和less文件配置各自的loaderwebpack的output配...
    99+
    2024-04-02
  • JavaScript中Webpack的使用教程
    目录0.什么是Webpack1.Webpack的使用2.Webpack 的核心概念 2.1 entry2.1.1 单入口2.1.2 多入口2.2 output2.2.1 单...
    99+
    2024-04-02
  • vue cli webpack中如何使用sass
    这篇文章给大家分享的是有关vue cli webpack中如何使用sass的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1:安装依赖npm install s...
    99+
    2024-04-02
  • vscode中如何使用webpack指令
    vscode中如何使用webpack指令,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。在学习Vue的时候,在vscode的终端总使用webpack指令时,出现如...
    99+
    2023-06-20
  • webpack如何使用
    本篇内容介绍了“webpack如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!webpack介绍和使用一、webpack介绍1、由来由...
    99+
    2023-07-02
  • Node.js Webpack常见的模式详解
    目录 一、认识插件 Plugin认识Plugin二、CleanWebpackPlugin三、HtmlWebpackPlugin生成index.html分析自定义HTML模版...
    99+
    2022-11-13
    Node.js Webpack模式 Node.js Webpack
  • webpack loader配置全流程详解
    前言主要目的为稍微梳理从配置到装载的流程。另外详解当然要加点源码提升格调(本人菜鸟,有错还请友善指正)被的WebPack打包的文件,都被转化为一个模块,比如import './xxx/x.jpg'或require('...
    99+
    2023-06-03
  • 超级详细的webpack Plugin讲解
    目录一、pulgin 的作用二、pulgin 配置方式三、pulgin 的本质四、常见的 pulgin4-1 html-webpack-plugin4-2 clean-webpack...
    99+
    2024-04-02
  • webpack自定义loader全面详解
    目录什么是loaderloader类型如何指定loader类型如何禁用一些loader?开发自定义两个loader,并分别实现url-loader和file-loaderfile-l...
    99+
    2023-01-04
    webpack自定义loader webpack loader
  • webpack-dev-server中如何配置使用
    这篇文章给大家分享的是有关webpack-dev-server中如何配置使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1安装的WebPack-dev-server 在终端输入...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作