Webpack中的“ publicPath”有什么作用?
Webpack文档指出output.publicPath
:
在
output.path
与JavaScript的视图。
您能否详细说明这实际上意味着什么?
我使用output.path
和output.filename
来指定Webpack在哪里输出结果,但是我不确定要放入什么output.publicPath
以及是否需要。
module.exports = {
output: {
path: path.resolve("./examples/dist"),
filename: "app.js",
publicPath: "What should I put here?"
}
}
webpack使用publicPath来替换在CSS中定义的用于引用图像和字体文件的相对路径。
webpack2文档以更简洁的方式对此进行了解释:https ://webpack.js.org/guides/public-path/#use-cases
在我的情况下,我有一个CDN,并且我将所有处理过的静态文件(js,imgs,字体...)放入我的CDN中,假设URL为http://my.cdn.com/
因此,如果存在一个js文件,该文件是html中的原始引用网址是“ ./js/my.js”,则在生产环境中应变为http://my.cdn.com/js/my.js
在这种情况下,我需要做的就是将publicpath设置为http://my.cdn.com/, 然后webpack将自动添加该前缀
您可以使用publicPath指向希望webpack-dev-server服务其“虚拟”文件的位置。publicPath选项将与webpack-dev-server的content-build选项位于相同位置。 webpack-dev-server创建启动时将使用的虚拟文件。这些虚拟文件类似于webpack创建的实际捆绑文件。基本上,您将希望--content-base选项指向index.html所在的目录。这是示例设置:
webpack-dev-server已创建一个虚拟资产文件夹以及它引用的虚拟bundle.js文件。您可以通过转到localhost:8080 / assets / bundle.js进行测试,然后在应用程序中检入这些文件。它们仅在您运行webpack-dev-server时生成。
filename指定在完成构建步骤后所有捆绑代码将累积到的文件名。
path指定将在其中将app.js(文件名)保存到磁盘的输出目录。如果没有输出目录,则webpack将为您创建该目录。例如:
这将创建一个目录的myproject /例子/ DIST和该目录下的它创建app.js,/myproject/examples/dist/app.js。构建后,您可以浏览到myproject / examples / dist / app.js以查看捆绑的代码
publicPath:“我应该在这里放什么?”
publicPath在Web服务器中指定从中获取捆绑文件app.js 的虚拟目录。请记住,使用publicPath时的服务器一词可以是webpack-dev-server或express服务器,也可以是可与webpack一起使用的其他服务器。
例如
此配置告诉webpack将所有js文件捆绑到examples / dist / app.js并写入该文件。
publicPath告诉webpack-dev-server或express服务器从服务器中的指定虚拟位置(即/ public / assets / js)提供此捆绑文件,即examples / dist / app.js。因此,在您的html文件中,您必须将此文件引用为
因此,总而言之,publicPath就像
virtual directory
服务器之间的映射,output directory
并由output.path配置指定。只要对文件public / assets / js / app.js的请求到来,就会提供/examples/dist/app.js文件output.path
本地磁盘目录,用于存储所有输出文件(绝对路径)。
例:
path.join(__dirname, "build/")
Webpack会将所有内容输出到
localdisk/path-to-your-project/build/
output.publicPath
上载捆绑文件的位置。(相对于服务器根目录)
例:
/assets/
假设您将应用程序部署在服务器根目录下
http://server/
。通过使用
/assets/
,该应用将在以下位置找到Webpack资产http://server/assets/
。在后台,webpack遇到的每个URL都将被重写为以“/assets/
” 开头。在浏览器中执行时,webpack需要知道您将在何处托管生成的包。因此,它能够请求额外的块(当使用代码拆分时)或分别通过文件加载器或url加载器加载的引用文件。
例如:如果将http服务器配置为托管生成的包,
/assets/
则应输入:publicPath: "/assets/"
你的回答