Closed Dolov closed 5 months ago
有最小复现吗,只看图想不到具体的原因。
有最小复现吗,只看图想不到具体的原因。
https://github.com/Dolov/ctrl-timer 一个我正在开发的工具库
问题出在 eval
上,在你的代码里有 eval
的调用,eval 在运行的时候实际上可以更改你源码的上下文,所以变量、字符串等都不可以压缩,因为未来 eval 里可能去修改这些值。
father umd 默认使用的压缩器是 terser ,默认情况下,如果有 eval ,因为如上 eval 的行为,会避免压缩代码,通过如下配置可以强制压缩:
// .fatherrc.ts
umd: {
chainWebpack(config) {
config.optimization.minimizer('js-terser').tap((args) => {
args[0].terserOptions.mangle = {
eval: true,
}
return args
})
return config
},
},
详见 terser options 文档。
另外在代码中使用 eval 是不安全的,不可以任意执行一段代码,这样会有很高的注入等安全风险,目前绝大多数第三方库都不会使用 eval ,只有极少数库在动态执行的时候会使用 Function 构造器模拟 eval (此处略,请自行研究),所以正常在浏览器运行的前端代码都不会有 eval ,如果你的代码只在 node 里运行,只打包 cjs / esm 即可,无需 umd (使用 umd 主要是为了在浏览器里使用)。
好的,明白了,多谢
Version
4.4.0
OS Version
macos 14.3
Node.js Version
v16.19.0
Link to minimal reproduction
~
Steps to reproduce
What is expected?
不希望暴漏出项目路径
What is actually happening?
~
Any additional comments? (optional)