san*_*e89 5 ruby-on-rails webpack vue.js webpacker
我正在使用Rails 5.2.0和Webpacker gem来部署Vue应用程序。
show.html.erb文件非常简单:
<div data-behavior="vue-app"><MyComponent></MyComponent></div>
然后在我的入门包中,包是packs / my_vue_app.js:
import TurbolinksAdapter from 'vue-turbolinks';
import Vue from 'vue/dist/vue.esm'
Vue.use(TurbolinksAdapter);
import MyComponent from '../components/my_app/index.vue'
document.addEventListener('turbolinks:load', () => {
var element = $('[data-behavior="vue-app"]');
if(!element) { return };
console.log('Initializing Vue');
const app = new Vue({
el: element[0],
data: {
},
components: { MyComponent }
})
})
Run Code Online (Sandbox Code Playgroud)
在开发中,一切正常。该应用程序已安装且正常运行。
但是在生产中,在页面加载和JS运行之后,<div data-behavior="vue-app">将从分页中删除,仅保留<!-- -->在原处。
在控制台中,绝对没有错误。我可以使用DevTools确认pack js文件已加载并已解析,因为console.log已打印在控制台中。
哎呀,Vue运行正常的证明是,在<div>解析JS之后,已从DOM中删除了整个安装位置。
最奇怪的是,我可以通过在console.log行上附加调试器并在调试器暂停执行时将其关闭来使应用程序挂载ONCE。即使当时我看到应用程序正在安装也很艰难,但后来却无法安装它,甚至再也不用调试器了……这真的非常奇怪。
这些是package.json的版本:
"vue": "^2.5.16",
"vue-loader": "14.2.2",
"vue-template-compiler": "^2.5.16",
Rails应用程序是全新的,除了默认设置外没有其他配置。
Webpacker gem是3.5.3,Rails是5.2.0。
在此上花了很长时间之后,我才发现以下github问题:https : //github.com/rails/webpacker/issues/1520
编辑:我提供了一个实际发生此错误的实际生产应用程序的链接:https : //planilha.tramitacaointeligente.com.br/planilhas/ED2sUXz32-R9CJKdkmtf8Q
您会看到它没有安装。这是开发中的同一页面:
我最终设法通过更改Vue应用程序加载的定义方式解决了该问题。
尝试import Vue from 'vue'(而不是from 'vue/dist/vue.esm'),然后:
const app = new Vue({
el: domElement,
render: h => h(RootComponent)
})
Run Code Online (Sandbox Code Playgroud)
Webpacker gem的hello_vue.js支架中显示的注释告诉您,您可以选择使用DOM作为模板,也可以使用呈现功能加载组件。它们都可以在开发中使用,但是只有后者(使用vue而不是vue / dist / vue.esm使用vue加载具有渲染功能的组件并渲染:h => h(RootComponent)在生产中对我有用。
到目前为止,这是我一生中最长,最令人沮丧的调试会话,因为控制台中绝对没有错误,您只能盯着空白屏幕,并且Vue正在运行,因为它从中删除了安装到的DOM元素DOM。
解决方案的来源:https : //stackoverflow.com/a/48651338/1290457,这是Webpacker gem https://github.com/rails/webpacker/issues/1520上的github问题(当前已打开)
我仍然不知道如何在生产环境中使用DOM作为Vue的模板。
小智 5
我在 Rails 5.2 + webpack Vue 中遇到了类似的问题。一切都在开发中很好,但在生产中却不起作用。经过几个小时的调查,我找到了原因。这是来自webpaker gem docs 的推荐 。
添加这个
Rails.application.config.content_security_policy do |policy|
if Rails.env.development?
policy.script_src :self, :https, :unsafe_eval
else
policy.script_src :self, :https
end
end
Run Code Online (Sandbox Code Playgroud)
破坏生产。删除else部分 - 解决问题。
Chrome 默默地忽略了这一点。Firefox 显示警告。
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |