【发布时间】:2021-01-17 10:42:38
【问题描述】:
我正在使用基于Kocal's project 的vue 3、vue-router 和vuex 开发一个chrome 扩展,它在底层使用vue-cli。我尽可能使用单一文件组件,并广泛使用 vue 绑定。
在开发模式下一切正常,但我最近尝试为生产构建应用程序,但遇到了这个错误部分渲染:
chunk-vendors.f6de00a6.js:11 EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".
经过几天的挖掘,我的理解是 webpack 或 vue 编译系统通过 eval 脚本引用/注入代码来搞乱 CSP。由于我对此还很陌生,所以我很难通过阅读来区分我能做什么。
我尝试了不同的方法:
- 为运行时定义
$vue别名仅在vue.config.js中构建(假设通过在运行前编译代码但以新错误结束:Uncaught TypeError: Object(...) is not a functionforo=Object(n["withScopeId"])("data-v-21ae70c6");来删除不安全的 eval) - 在根目录下使用
render()函数 - 将
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",添加到manifest.json - 将组件切换到
render()以查看我是否有更好的机会进行部分渲染,但最终没有显示任何内容,尽管正在执行来自渲染的 console.log。 - 在 vue.config 上向chainWebpack 拆分清单和内联清单添加配置
让我感到困惑的是,我无法摆脱unsafe-eval,充其量只是部分显示,最坏的是空白页。无论如何,绑定似乎都被取消了,使用路由器链接更改页面将给出一个空白页面。
编辑:从 webpack 挖掘编译代码并将最小化选项设置为 false 后,错误似乎来自供应商:vue-i18n
【问题讨论】:
标签: vue.js webpack google-chrome-extension vue-cli vuejs3