我試圖將具有幾個jQuery插件的舊着陸頁轉換爲Vue應用程序。原因是,目標網頁正在擴展並將成爲一個網絡應用程序。VueJS 2使用jQuery插件進行服務器端渲染
使用https://github.com/vuejs/vue-hackernews-2.0/作爲模板。主要原因是它做服務器端渲染。
問題是錯誤:
ReferenceError: window is not defined
at Object.<anonymous> (__vue_ssr_bundle__:3398:2408)
at __webpack_require__ (__vue_ssr_bundle__:21:30)
at Object.module.exports.Object.defineProperty.value (__vue_ssr_bundle__:1280:126)
at __webpack_require__ (__vue_ssr_bundle__:21:30)
at Object.<anonymous> (__vue_ssr_bundle__:2099:3)
at __webpack_require__ (__vue_ssr_bundle__:21:30)
at Object.<anonymous> (__vue_ssr_bundle__:1380:81)
at __webpack_require__ (__vue_ssr_bundle__:21:30)
at Object.module.exports.Object.defineProperty.value (__vue_ssr_bundle__:378:66)
at __webpack_require__ (__vue_ssr_bundle__:21:30)
到目前爲止,我發現,這個問題是由window
造成節點不是。但是,我不知道如何使它可用,或者如何在服務器端呈現頁面後注入jQuery。
vue-hackernews-2.0幾乎沒有變化。我做的主要改變是在webpack.client.config.js
上添加了jQuery。
這被添加到plugins
(發現了另一個答案,它應該做時,它需要在應用程序的jQuery可用):
new webpack.ProvidePlugin({
$: 'jquery',
jquery: 'jquery',
'window.jQuery': 'jquery',
jQuery: 'jquery'
})
這是LandingView.vue
<template>
<div class="landing-page">
</div>
</template>
<script>
import owl from '../../public/assets/libs/owl.carousel.2.0.0-beta.2.4/owl.carousel.min.js'
import $ from 'jquery';
export default {
name: 'landing-view',
created() {
console.log('hello world!');
}
}
</script>