webpack5的entry和output配置小白学习
作者:smallStone 发布时间:2024-04-30 09:52:08
output
输出打包后的代码,配置如何输出和输出位置
在webpack.config
中output
包含以下属性:
path
:代码打包后要输出的位置,且为绝对路径: 例如:path.resolve(__dirname, 'build')
,则打包后的代码都会输出到当前目录下的build
文件夹内。
publicPath
:需要加载的资源的真实路径,默认为相对路径:例如:http://www.baidu.com/dist/
,
则在index.html
中可以看到script
标签的src
属性的值都加了publicPath
的值。一般情况下我们都将它设置为/
或者./
crossOriginLoading
: 设置script
的cross-origin
属性,该属性有三个值:
false
: 默认值, 表示不跨域;
anonymous
: 表示跨域,不设置任何凭证;
use-credentials
: 表示跨域,需要设置凭证;(基本用不到)
filename
打包后的js文件名称,且需要写后缀
assetModuleFilename
静态资源输出名称
chunkFilename
异步引入的文件名称,既在js中import('XXX.js').then(_=>{})这样引入或者通过webpack自带的异步引入方式等其他异步引入js的方式,这里就会使用配置的名称;asseet_[name]_[id].js
可以配置成通用形式,也可以自己指定[chunk]
值。
// webpack自带的一些内置变量一样的东西。
[name]
:原始文件名称
[file]
:原始路径,带文件名、后缀
[base]
:原始文件名+后缀
[path]
:路径名称,不带文件名称
[id]
:可以设置,或者按照路径分割,啥都不管的话就等于webpack给当前文件引用的key值
library
: 不仅仅是一个文件,而是需要导出一个库。则就会把入口文件export defalut导出的东西创建成一个ems形式的的包文件,即可在任意项目内就通过script或import形式引入使用了。
library.name
包名称
library.type
:var,module,umd,cmd,amd,require等等
library.export
:指定哪个导出应该暴露为一个库,假如入口文件有log1,log2两个方法。则可以指定导出谁。
library.auxiliarycomment
:在UMD模式下可用,可以在js内添加注释说明,一般用于,显示作者,代码版本号,版权等等信息。
library.umdNamedDefine
: 在UMD模式下是否使用define
最常用的也就是这些了。
entry
我可以指定webpack的配置文件,通过--config
webpack
默认入口entry: src/index.js
,出口为:dist/main.js
默认配置文件为:webpack.config.js
如果需要指定其他配置文件,可以使用--config
例如:
在webpack5
文件夹根目录创建一个名为:webpack.dev.js
,将webpack.config.js
中的内容剪贴到它中。
此时webpack.config.js
中已经没有内容,这时候执行npm run build
会直接报错。
我们修改package.json
中scripts
属性的值为:
"scripts": {
"build": "webpack --config ./webpack.dev.js"
}
再执行npm run build
发现可以构建成功,则我们就将默认的配置文件改为了webpack.dev.js
这在日后我们需要不同环境构建不同内容时候,通过命令可以轻松构控制配置文件的使用起到关键性作用。
好了,上面内容过于简单,就不使用webpack-cli
来创建了,有兴趣的小伙伴可以自行搜索
我可以指定webpack的需要工作的根目录
webpack.config.js中内容如下:
module.exports = {
context: path.resolve(__dirname, 'src'), //
entry: './src/index.js',
}
这context是干啥的啊?
执行以下npm run build
,发现报错了。看报错信息为:
Module not found: Error: Can`t resolve './src/index.js' in 'User/xxx/webpack5/src'
这下我们翻译一波不就理解了么!原来context
指定到src
为上下文了,则我们内部使用的目标都指定到src目录了。那entry
就不能再写成./src/index.js
了。(你真废话,能讲明白不?)
其实就是一句话:使用了context
后,则入口出口路径都是以context
配置的路径为基准了。因此,entry
就得写成/index.js
或./index.js
, 因为现在/
就指得是src
目录。
把context先删除或者注释了吧,下面的内容用不到。。。
说到entry了,那我为何就不能有多个入口文件呢?
entry
可以配置多个入口文件,当只有一个的时候值为string
类型,多个的时候就为Array
module.exports = {
entry: ['./src/index.js', './src/test.js'] // 多个为Array,有先后顺序之分
}
我们可以在test.js
中输入一串代码console.log('少装B,不会造雷劈!')
,再执行npm run build
,双击打开dist/index.html
,F12
打开控制台,可以发现:index.js
和test.js
中的内容都输出了。
(诶?我就想让test.js
放数组第一位,你会发现,test.js
中的内容先打印了)entry
也是有先后顺序之分的,数组前面的先执行,后面的以此类推。
entry
也可以是object
类型,用的比较少,稍微记一下得了。若你是大牛,需要写自己的js插件引擎啥的,那你就学吧。
下面内容就是说:我不想让index.js
和test.js
打包在一起, 让他们分别打包
entry: {
moment: { import: 'moment-mini', runtime: 'runtime' }, // 将公用部分提出来, 生成dist/moment.js并自动加入到html内,通过script标签加入
reactvendors: { import: ['react', 'react-dom'], runtime: 'runtime' }, // 将公用部分提出来, 生成dist/reactvendors.js并自动加入到html内,通过script标签加入
abc: ['vue', 'react'],
app: {
import: './src/index.js', // 入口文件
dependOn: ['abc'], // 本来app构建时候会打包所有依赖,但这里配置了abc,则就不会将'vue','react'打包在内
filename: 'app.js' // 打包后的文件名称
},
test: {
import: './src/test.js', // 入口文件
dependOn: ['reactvendors', 'moment'], // 本来test构建时候会打包所有依赖,但这里配置了reactvendors,moment ,则就不会将其所需要的包打包在内,而是通过共享形式加入到html中
filename: 'pages/[name].js' // 打包后的文件名称,也可以写成 'pages/test.js',则生产地址为'dist/pages/test.js', [name]: test
},
}
entry: {
app: './src/index.js', // 入口文件,
test: ['./src/test.js', './src/nulls.js'], // 多个入口文件
}
我们测试entry
为以下的配置:
entry: {
app: {
import './src/index.js'
},
test: './src/test.js'
}
因为每次构建都需要删除dist
文件夹才能保证不缓存任何东西,则我们在package.json
中输入:
"scripts": {
"build": "rm -rf ./dist && webpack",
"build:dev": "rm -rf ./dist && webpack --config ./webpack.dev.js" // 这行我写着只是为了方便读者理解
},
// 或者你手动删除一下dist文件夹,不改package.json也行,可能你运行在cmd中不支持rm命令,可以使用git的bash命令行窗口
// windows平台下的vscode自带的命令行可能不支持rm命令,所以手动删除一下dist,就别改package.json文件了
再执行npm run build
如果报错说'rm' 不是内部或外部命令,也不是可运行的程序
,那你就别改package.json
,手动删除dist文件一下即可
可以发现dist
文件夹内有两个js
文件:app.js
和test.js
,再打开index.html
文件,发现它们两个js
文件也都被自动以<script>
标签形式引入了。
我们再改变一点:
entry: {
app: {
import './src/index.js',
filename: 'nba.js'
},
cba: {
import './src/index.js',
filename: '[name].js'
},
}
再执行npm run build
,可以发现dist
文件夹内有:nba.js
和cba.js
来源:https://segmentfault.com/a/1190000043785929


猜你喜欢
- 前言Python 3.7 将于今年夏天发布,Python 3.7 中将会有许多新东西:各种字符集的改进对注释的推迟评估以及对dataclas
- 开放源代码社区为了扩展MySQL的使用范围,开发出了.Net框架(.NET Framework)中可以使用的数据库连接器。我们就来学习一下如
- 1.字符串转二进制数组 string content="这是做个测试!"; System.Text.UnicodeEnc
- 超级简单实现iframe框架滚动控制,前提要会简单修改原代码。step1:插入iframe标签在你想要的位置。<iframe 
- 最近python代码遇到了一个神奇的需求, 就是如果将python utc datetime转换为时间戳.百度找到都是使用time.mkti
- 一、multiprocess模块multiprocess不是一个模块而是python中一个操作、管理进程的包。子模块分为四个部分:创建进程部
- 经常遇到百度网盘的压缩文件加密了,今天我们就破解它!实现思路上篇文章给大家介绍了爆破密码的思路,感兴趣的朋友可以了解下。其实都大同小异:无非
- 最近工作上有个需求,当爬虫程序遇到异常的时候,需要通知相应的人员进行修复。如果是国外可能是通过邮件的方式来通知,但国内除了万年不变的 qq
- 本文实例为大家分享了python读取视频流提取视频帧的具体代码,供大家参考,具体内容如下方法一:通过imageio库和skimage库1.
- pop()函数1、描述pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。语法pop()方法语法:list.p
- 有 N 个花园,按从 1 到 N 标记。在每个花园中,你打算种下四种花之一。paths[i] = [x, y] 描述了花园 x 到花园 y
- 这个示例使用的Python版本为3.7版本,一、bing壁纸接口访问bing的官网,通过浏览器开发者工具,查看网络可以找到一个请求壁纸的接口
- 使用UNION多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将
- 1.安装登陆确认mysql已经开启2.建库3.建表Create 数据库表右击选择Create Table,填写Table Name,Comm
- 前言:Selenium 支持 Web 浏览器的自动化,它提供一套测试函数,用于支持 Web 自动化测试。函数非常灵活,能够完成界面元素定位、
- 1、jquery//获取value值$("#ddlSubmodel").val();//获取text值$("#
- import pyperclipimport pyautogui# PyAutoGUI中文输入需要用粘贴实现# Py
- list解析先看下面的例子,这个例子是想得到1到9的每个整数的平方,并且将结果放在list中打印出来>>> power2
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 14 - Periodical and Intro
- vue2 和vue3 在 rollup 里面打包会存在几种问题, 包版本的问题,babel 转换jsx等问题将vue2写的组件 打成一个包,