resolve
resolve 用于配置模块如何解析.
resolve.alias
resolve.alias 用于创建import
或require
的别名,来确保模块引入变得更简单
配置
-
配置
@
使之代表./src
目录resolve:{
alias:{
"@":Path.resolve(process.cwd(),'./src')
}
}
resolve.modules
resolve.modules 告诉 webpack 解析模块时应该搜索的目录
配置
-
使用绝对路径,只在
node_modules
目录中查找resolve: {
modules:['node_modules']
}
resolve.extensions
resolve.extensions 自动解析确定的扩展
配置
-
配置解析的扩展为
.js
、.jsx
、.json
resolve: {
extensions: [".js", ".jsx", ".json"],
}
resolve.mainFields
resolve.mainFields 当从 npm 包中导入模块时(例如,import * as D3 from "d3"),此选项将决定在 package.json 中使用哪个字段 导入模块。根据 webpack 配置中指定的 target 不同,默认值也会有所不同。
配置
-
根据
package.json
中的main
字段查找文件: 引入的依赖模块优先根据resolve.mainFields
查找文件,首先查看有没有package.json
文件,然后查看package.json
中是否有main
字段resolve: {
mainFields: ["main"],
}
resolve.mainFiles
resolve.mainFiles 解析目录时要使用的文件名
配置
-
配置解析目录时要使用
index.js
: 如果依赖模块没有package.json
文件、或者package.json
中没有指定查找的字段resolve.mainFields
,那么这时候根据resolve.mainFiles
来查找文件resolve: {
mainFiles:['index']
}
resolve.fallback
resolve.fallback 当正常解析失败时,重定向模块请求。webpack 5 不再自动 polyfill Node.js 的核心模块,这意味着如果你在浏览器或类似的环境中运行的代码中使用它们,你必须从 NPM 中安装兼容的模块,并自己包含它们。以下是 webpack 在 webpack 5 之前使用过的 polyfill 包列表:
语法
-
方式一、引入对应的
Node
模块: 可以解决webpack5
移除polyfill
的问题resolve: {
fallback: {
assert: require.resolve('assert'),
buffer: require.resolve('buffer'),
console: require.resolve('console-browserify'),
constants: require.resolve('constants-browserify'),
crypto: require.resolve('crypto-browserify'),
domain: require.resolve('domain-browser'),
events: require.resolve('events'),
http: require.resolve('stream-http'),
https: require.resolve('https-browserify'),
os: require.resolve('os-browserify/browser'),
path: require.resolve('path-browserify'),
punycode: require.resolve('punycode'),
process: require.resolve('process/browser'),
querystring: require.resolve('querystring-es3'),
stream: require.resolve('stream-browserify'),
string_decoder: require.resolve('string_decoder'),
sys: require.resolve('util'),
timers: require.resolve('timers-browserify'),
tty: require.resolve('tty-browserify'),
url: require.resolve('url'),
util: require.resolve('util'),
vm: require.resolve('vm-browserify'),
zlib: require.resolve('browserify-zlib'),
},
}, -
方式二、将对应的
Node
置为false
,关闭polyfill
检查: 同样可以解决webpack5
移除polyfill
的问题resolve: {
fallback: {
assert: false,
buffer: false,
console: false,
constants: false,
crypto: false,
domain: false,
events: false,
http: false,
https: false,
os: false,
path: false,
punycode: false,
process: false,
querystring: false,
stream: false,
string_decoder: false,
sys: false,
timers: false,
tty: false,
url: false,
util: false,
vm: false,
zlib: false,
},
},