问题背景
在Webpack项目中,需要自动替换掉已安装的库中的部分js文件。说是覆盖,其实是一种“换源”,在检测到目标位置文件被使用时,将其resource指向我们真正希望使用的文件。
具体方法
在webpack.config.js文件中,使用webpack自带的NormalModuleReplacementPlugin插件
JavaScript
const path = require('path')
const webpack = require('webpack')
//...
module.exports = {
//...
plugins: [
new webpack.NormalModuleReplacementPlugin(
/UnrealBloomPass\.js/, //正则匹配UnrealBloomPass.js,其中\.是.的转义
result => {
if ( result.resource ) {
//将源修改为我们真正希望使用的文件
result.resource = path.resolve(__dirname, '../src/assets/UnrealBloomPass.js')
}
}
),
// 根据webpack版本不同,有时使用request关键字,如下所示
new Webpack.NormalModuleReplacementPlugin(
/VabTabsBar\/index\.vue/,
result => {
if (result.request ) {
result.request = resolve('public/static/replace_stuff/index.vue')
}
}
)
]
}
以上代码实现的功能:采用正则匹配方式检测到node_modules中的UnrealBloomPass.js被使用时(,也可以使用路径,在这里我直接使用的是文件名),将其源替换为我们希望真正使用的文件:src/assets/UnrealBloomPass.js