【问题标题】:Vue JS 2.0 没有渲染任何东西?
【发布时间】:2017-01-22 03:42:54
【问题描述】:

使用Vue (^2.0.0-rc.6) + Browserify,入口点是index.js:

import Vue from 'vue'
import App from './containers/App.vue'

new Vue({ // eslint-disable-line no-new
  el: '#root',
  render: (h) => h(App)
})

App.vue:

<template>
  <div id="root">
    <hello></hello>
  </div>
</template>

<script>
import Hello from '../components/Hello.vue'
export default {
  components: {
    Hello
  }
}
</script>

<style>
body {
  font-family: Helvetica, sans-serif;
}
</style>

你好.vue:

<template>
  <div class="hello">
    <h1>\{{ msg }}</h1>
  </div>
</template>

<script>
export default {
  data () {
    return {
      msg: 'Hello Vue!'
    }
  }
}
</script>

空白屏幕,我错过了什么吗?

编辑:

条目 html 只是 &lt;div id="root"&gt;&lt;/div&gt;,控制台日志上没有错误,我很确定 Hello.vue 已加载,因为 console.log('test') 该文件出现在控制台上。

编辑 2:

发现错误:

[Vue 警告]:您正在使用 Vue 的仅运行时构建,其中 模板选项不可用。预编译模板 进入渲染函数,或使用编译器包含的构建。 (在发现 匿名组件 - 使用“名称”选项进行更好的调试 消息。)

这是否意味着我必须使用 webpack 解决方案?不能使用标准 HTML?

解决方案: 从 'vue/dist/vue.js' 导入 Vue

【问题讨论】:

  • 只是为了确定。使用 webpack 时,建议更改 webpack 配置,而不是 import Vue from 'vue/dist/vue.js' github.com/vuejs/vue/wiki/…
  • 请给出解决方案并接受它)
  • 如果您已经回答了自己的问题,您可以在下面发布答案并接受它,或者删除您的问题。我们不会在标题中使用“SOLVED”
  • 它有效。我正在尝试import Vue from 'vue' 而不是import Vue from 'vue/dist/vue'

标签: javascript vue.js vuejs2 browserify babeljs


【解决方案1】:

只是为了让寻找答案的人们的生活更轻松:

import Vue from 'vue/dist/vue.js'
import App from './App.vue'

new Vue({
  el: '#app',
  render: h => h(App)
})

来自作者——2.0 独立构建意味着(编译器+运行时)。 NPM 包的默认导出将仅在运行时进行,因为如果从 NPM 安装,您可能会使用构建工具预编译模板。

【讨论】:

  • 来自文档:“注意:不要从 'vue/dist/vue' 导入 Vue - 因为某些工具或 3rd 方库也可能导入 vue,这可能会导致应用同时加载运行时和独立构建同时构建并导致错误。” github.com/vuejs/vue/wiki/…
  • 是的,认真使用抽象名称,而不是硬编码这样的第三方库的路径。如果您的加载器不支持,请使用更好的加载器。
【解决方案2】:

如果您使用的是诸如 browserify 或 Webpack 之类的构建工具,您很可能可以使用 single file components 来避免此类错误(在单个文件组件中,模板会自动编译以通过 vueify 呈现函数)。您绝对应该尽量避免在其他任何地方使用模板。查看论坛和文档以获取有关如何避免它们的答案。

但根据我自己的经验,我知道在您的项目中找到导致错误消息的模板并不总是那么容易。如果您遇到同样的问题,作为临时解决方法,以下方法应该会有所帮助:

您不应该导入 'vue/dist/vue.js'(查看文档:https://github.com/vuejs/vue/wiki/Vue-2.0-RC-Starter-Resources#standalone-vs-runtime-builds 为什么不导入)

相反,您应该在您正在使用的构建工具中处理它。

就我而言,我使用的是 browserify,您可以在其中使用 aliasify 来创建别名。将以下内容添加到您的 package.json 文件中:

{
  // ...
  "browser": {
    "vue": "vue/dist/vue.common.js"
  }
}

对于 Webpack 用户,您似乎必须将以下内容添加到您的配置中:

resolve: {
    alias: {vue: 'vue/dist/vue.js'}
},

更多信息可以在文档中找到:https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only

【讨论】:

  • Aliasify 似乎对我使用 Browserify 不起作用。我注意到新文档建议简单地使用 ` "browser": { "vue": "vue/dist/vue.common.js" }` vuejs.org/v2/guide/… 然后我的模板出现了!
  • 有人可以解释resolve 属性的作用以及错误消失的原因吗?
  • @Felipe webpack.js.org/configuration/resolve 这只是在 webpack 配置中定义别名的地方...
  • webpack "resolve:" 条目可以放在 module.exports 对象的任何位置吗?添加上面的代码时出现异常。类似这个问题:stackoverflow.com/questions/49714936/…
【解决方案3】:

对于Vue 3.4.0可以在项目的根目录下添加一个新文件命名

vue.config.js 并在其中添加以下内容。

module.exports = {
  runtimeCompiler: true
}

下次启动应用时可以看到

204ms编译成功
20:46:46

App running at:

【讨论】:

    【解决方案4】:

    对于 Brunch,我通过在 brunch-config.js 中添加此规则解决了这个问题:

      npm: {
        aliases: {
          vue: "vue/dist/vue.js"
        }
      }
    

    http://brunch.io/docs/config#npm

    这是构建一个带有内部&lt;template&gt;的Vue组件:

    <template>
      <div> hello </div>
    </template>
    
    <script>
    
     export default {
       name: 'Hello',
       props: {
         title: String,
       },
     }
    </script>
    

    【讨论】:

    猜你喜欢
    • 2014-06-01
    • 1970-01-01
    • 2015-06-29
    • 2017-10-08
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多