webpack核心概念之输出(Output)

将所有的资源(assets)归拢在一起后,还需要告诉 webpack 在哪里打包应用程序。webpack 的 output 属性描述了如何处理归拢在一起的代码(bundled code)。下面本篇文章就来带大家深入了解一下webpack核心概念中的输出(output),希望对大家有所帮助!

 webpack核心概念之输出(Output)

输出(Output):配置 output 选项可以控制 webpack 如何向硬盘写入编译文件。注意,即使可以存在多个入口起点,但只指定一个输出配置。

起步

我们先npm init初始化一个项目,本地安装webpack和webpack-cli,然后在根目录创建index.html、webpack.config.js和src文件夹,在文件夹内再创建一个main.js作为入口文件

准备工作完成后如图所示:

image.png

main.js

function Component(){    var div=document.createElement('div')    div.innerHTML="来一起学习出口配置吧~"    return div}document.body.appendChild(Component())

登录后复制

index.html

    

登录后复制

packag.json

"scripts": {  "test": "echo "Error: no test specified" && exit 1",  "build":"webpack" //加上},

登录后复制

接下来就是配置部分:webpack.config.js

输出(Output))

配置 output 选项可以控制 webpack 如何向硬盘写入编译文件。

注意,即使可以存在多个入口起点,但只指定一个输出配置

下面是输出配置的几个概念:

1、path

path指定资源输出的位置,要求值必须为绝对路径,如:

const path=require('path')module.exports={    entry:'./src/main.js',    output:{        filename:'bundle.js',        //将资源输出位置设置为该项目的dist目录        path: path.resolve(__dirname, 'dist')    },}

登录后复制

在Webpack 4之后,output.path已经默认为dist目录。除非我们需要更改它,否则不必单独配置,所以如果是webpack4以上,你可以写成:

module.exports={    entry:'./src/main.js',    output:{        filename:'bundle.js',    },}

登录后复制登录后复制

2、filename

filename的作用是控制输出资源的文件名,其形式为字符串。在这里我把它命名为bundle.js,意为我希望资源输出在一个叫bundle.js的文件中:

module.exports={    entry:'./src/main.js',    output:{        filename:'bundle.js',    },}

登录后复制登录后复制

打包后如图,会自动生成一个dist文件夹,里面有个bundle.js文件

image.png

filename可以不仅仅是bundle的名字,还可以是一个相对路径

即便路径中的目录不存在也没关系,Webpack会在输出资源时创建该目录,比如:

  module.exports = {    output: {      filename: './js/bundle.js',    },  };

登录后复制

打包后如图:

image.png

在多入口的场景中,我们需要对产生的每个bundle指定不同的名字,Webpack支持使用一种类似模板语言的形式动态地生成文件名

在此之前,我们再去src中创建一个新的入口文件

vender.js:

function Component(){    var div=document.createElement('div')    div.innerHTML="我是第二个入口文件"    return div}document.body.appendChild(Component())

登录后复制

webpack.config.js:

module.exports = {    entry:{        main:'./src/main.js',        vender:'./src/vender.js'    },    output: {      filename: '[name].js',    }, };

登录后复制

打包后如图:

image.png

filename中的[name]会被替换为chunk name即main和vender。因此最后会生成vendor.js与main.js

此时如果你希望看到内容,你还需在index.html中改下内容,将路径对应上最后打包出来的bundle

        

登录后复制

[问题]这时候就会有个需求了,如何让index.html自动帮我们将生成的bundle添加到html中呢?这里可以用到插件 HtmlWebpackPlugin,详细看下方

3、其他

除了[name]可以指代chunk name以外,还有其他几种模板变量可以用于filename的配置中:

[hash]:指代Webpack此次打包所有资源生成的hash[chunkhash]:指代当前chunk内容的hash[id]:指代当前chunk的id[query]:指代filename配置项中的query

它们可以:控制客户端缓存

[hash]和[chunkhash]都与chunk内容直接相关,如果在filename中使用,当chunk的内容改变时,可以同时引起资源文件名的更改,从而使用户在下一次请求资源文件时会立即下载新的版本而不会使用本地缓存。

[query]也可以起到类似的效果,但它与chunk内容无关,要由开发者手动指定。

4、publicPath

publicPath是一个非常重要的配置项,用来指定资源的请求位置

以加载图片为例

import Img from './img.jpg';function component() {    //...    var img = new Image();    myyebo.src = Img //请求url//...}

登录后复制

        {          //...          query: {            name: '[name].[ext]',            outputPath: 'static/img/',            publicPath: './dist/static/img/'          }        }

登录后复制

由上面的例子所示,原本图片请求的地址是./img.jpg,而在配置上加上publicPath后,实际路径就变成了了./dist/static/img/img.jpg,这样就能从打包后的资源中获取图片了

publicPath有3种形式:

HTML相关

我们可以将publicPath指定为HTML的相对路径,在请求这些资源时会以当前页面HTML所在路径加上相对路径,构成实际请求的URL

//假设当前html地址为:https://www.example.com/app/index.html//异步加载的资源名为 1.chunk.jspubilicPath:"" //-->https://www.example.com/app/1.chunk.jspubilicPath:"./js" //-->https://www.example.com/app/js/1.chunk.jspubilicPath:"../assets/"  //-->https://www.example.com/assets/1.chunk.js

登录后复制

Host相关

若publicPath的值以“/”开始,则代表此时publicPath是以当前页面的host name为基础路径的

//假设当前html地址为:https://www.example.com/app/index.html//异步加载的资源名为 1.chunk.jspubilicPath:"/" //-->https://www.example.com/1.chunk.jspubilicPath:"/js/" //-->https://www.example.com/js/1.chunk.js

登录后复制

CDN相关

上面两个都是相对路径,我们也可以使用绝对路径的形式配置publicPath

这种情况一般发生于静态资源放在CDN上面时,由于其域名与当前页面域名不一致,需要以绝对路径的形式进行指定

当publicPath以协议头或相对协议的形式开始时,代表当前路径是CDN相关

//假设当前html地址为:https://www.example.com/app/index.html//异步加载的资源名为 1.chunk.jspubilicPath:"http://cdn.com/" //-->http://cdn.com/1.chunk.jspubilicPath:"https://cdn.com/"//-->https://cdn.com/1.chunk.jspubilicPath:"//cdn.com/assets"//-->//cdn.com/assets/1.chunk.js

登录后复制

应用

1、单个入口

在 webpack 中配置 output 属性的最低要求是将它的值设置为一个对象,包括以下两点:

filename 用于输出文件的文件名。目标输出目录 path 的绝对路径

module.exports={    entry:'./src/main.js',    output:{        filename:'bundle.js',    },}//webpack4以后dist会默认生成,于是这里省略了path

登录后复制

2、多个入口

如果配置创建了多个单独的 “chunk”,则应该使用占位符来确保每个文件具有唯一的名称

这里用到了上面所讲的filename的[name]

另外,如果想将这些资源放进指定的文件夹,可以加上path配置

module.exports={    entry: {      main: './src/main.js',      vender: './src/vender.js'    },    output: {      filename: '[name].js',      path: __dirname + '/dist/assets' //指定打包后的bundle放在/dist/assets目录下    }  }// 打包后生成:./dist/assets/main.js, ./dist/assets/vender.js

登录后复制

HtmlWebpackPlugin

本章上方遗留的问题可以通过使用插件HtmlWebpackPlugin解决

安装插件

npm install --save-dev html-webpack-plugin

登录后复制

配置插件

const HtmlWebpackPlugin=require('html-webpack-plugin') //加载模块module.exports = {    entry:{        main:'./src/main.js',        vender:'./src/vender.js'    },    //添加插件    plugins:[        new HtmlWebpackPlugin({            title:'output management'        })    ],    output: {      filename: '[name].js',    }, };

登录后复制

打包

打包完成后你会发现dist中出现了一个新的index.html,上面自动帮我们添加所生成的资源,打开后会发现浏览器会展示出内容

image.png

这意味着,以后初始化一个项目就不必写index.html了

源码可从这里获取:

https://sanhuamao1.coding.net/public/webpack-test/webpack-test/git/files

更多编程相关知识,请访问:编程视频!!

以上就是webpack核心概念之输出(Output)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2698987.html

(0)
上一篇 2025年3月7日 18:54:18
下一篇 2025年3月1日 17:49:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • webpack核心概念之入口配置(entry)

    在一切流程的最开始,我们需要指定一个或多个入口(entry),也就是告诉webpack具体从源码目录下的哪个文件开始打包。下面本篇文章就来带大家深入了解一下webpack核心概念中的入口配置(entry),希望对大家有所帮助! 如果把工程中…

    2025年3月7日 编程技术
    200
  • 聊聊webpack中怎么压缩打包html资源

    webpack中怎么压缩打包html资源?下面本篇文章就来给大家简单介绍一下webpack压缩打包html资源的方法,希望对大家有所帮助! 为什么需要打包html资源 写代码时引入的是src下面的js文件,经过webpack打包后,形成了一…

    2025年3月7日
    200
  • 【整理分享】一些webpack面试题(附答案解析)

    谈谈你对Webpack的理解 1.Webpack是什么? webpack 是一个静态模块打包器,当 webpack 处理应用程序时,会递归构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将这些模块打包成一个或多个 bundle。 w…

    2025年3月7日
    200
  • 如何利用React和Webpack实现前端代码的模块化打包

    如何利用React和Webpack实现前端代码的模块化打包 引言:在前端开发中,随着项目的复杂性增加,代码的管理和维护变得越来越困难,因此模块化打包成为了必不可少的工具。React作为一款流行的前端框架,通过组件化开发的思想,大大简化了复杂…

    2025年3月7日
    200
  • 使用vue2.x+webpack如何搭建前端项目

    本文给大家介绍了vue2.x、webpack、vuex、sass+axios、elementui等快速搭建前端项目框架的详细操作方法,需要的跟着学习下吧。 一、本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己…

    2025年3月7日 编程技术
    200
  • Webpack优化配置缩小文件搜索范围的介绍

    这篇文章主要介绍了webpack优化-缩小文件搜索范围的相关知识,文中较详细的给大家介绍了可以优化的途径,需要的朋友可以参考下 Webpack 启动后会从配置的 Entry 出发,解析出文件中的导入语句,再递归的解析。 在遇到导入语句时 W…

    编程技术 2025年3月7日
    200
  • webpack原理的深入介绍(附示例)

    本篇文章给大家带来的内容是关于webpack原理的深入介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本文抄自《深入浅出webpack》,建议想学习原理的手打一遍,操作一遍,给别人讲一遍,然后就会了 在阅读前…

    2025年3月7日
    200
  • vue中的webpack用什么安装

    vue中的webpack用node包管理器“npm”或npm镜像“cnpm”来安装。webpack是一个用于现代JavaScript应用程序的静态模块打包工具,是基于node.js开发的,使用时需要有node.js组件支持;需要使用npm或…

    2025年3月7日 编程技术
    200
  • 深入了解模块打包工具webpack

    什么是webpack?本篇文章就来带大家认识了解下模块打包工具webpack,希望对大家有所帮助! 一、什么是webpack 1、官方解释 从本质上来讲,webpack是一个现在的javaScript应用的静态模块化打包工具。(从两点概括这…

    2025年3月7日 编程技术
    200
  • Webpack是什么?详解它是如何工作的?

    Webpack简介 Webpack是一款模块打包工具。它为不同的依赖创建模块,将其整体打包成可管理的输出文件。这一点对于单页面应用(如今Web应用的事实标准)来说特别有用。 假设我们有一个可以执行两个简单数学任务(加法和乘法)的应用程序,为…

    2025年3月7日
    200

发表回复

登录后才能评论