首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Vue添加到现有的旧网站,删除div,而不是显示旧html。

将Vue添加到现有的旧网站,删除div,而不是显示旧html。
EN

Stack Overflow用户
提问于 2019-02-22 16:38:25
回答 3查看 683关注 0票数 4

我试图用Vue包装我的旧网站,所以所有旧的jQuery脚本都应该继续运行,所有旧的el都应该显示出来,但是由于某种原因,el和它里面的所有东西都被删除了。

这是在使用脚本的when打包版本时,因此,例如:

代码语言:javascript
运行
复制
<html>
    <head></head>
    <body>
        <div id="wrapper">
            <p>dsadfasfasfasfas</p>
            <p>dfasdsadasdasdas</p>
        </div>
    </body>
    <script src="/assets/js/app.min.js"></script>
</html>

身体标签里什么都不会显示。但是,如果我在网站顶部导入Vue,并将下面的代码替换为and打包的版本,它就可以正常工作了!

代码语言:javascript
运行
复制
window.app = new Vue({
    el: '#wrapper',
    data: {
        test: 'hello world'
    },
    created() {
        console.log('Vue Running');
    }
});

编辑

这也是被编译的app.js

代码语言:javascript
运行
复制
import Vue from 'vue';

// window.EventBus = new Vue();
window.app = new Vue({
    el: '#wrapper',
    data: {
        test: 'hello world'
    },
    created() {
        console.log('Vue Running');
    }
});

编辑

这是我的webpack.config.js:

代码语言:javascript
运行
复制
const path = require('path');
module.exports = {
    mode: 'production',
    entry: [
        './resources/js/vue/app.js'
    ],
    output: {
        filename: 'app.min.js',
        path: path.resolve(__dirname, 'public_html/assets/js/vue')
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                use: 'vue-loader'
            }
        ]
    },
    plugins: [
        new VueLoaderPlugin()
    ]
};

编辑2

只要删除import vue from 'vue',并使用普通的script src=...方式导入它,它就能工作了。我的印象是,如果我导入vue和编译,那么这将包括vue在我的网站?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-26 22:51:58

NPM包导出的默认生成是仅运行时生成。它不会带来模板编译器。因此,您需要在javascript中导入vue的完整构建版本,或者创建一个webpack别名(如果您使用webpack)。

当使用呈现函数或单个File组件定义模板时,不会出现此问题。

注意:

如果您不希望支持旧的浏览器,如果您不使用最新的ES功能,那么您就不需要babel-loader,如果您不使用单个文件组件,则不需要vue-loader

还请注意,您必须在HTML <meta charset="utf-8">中包含元标记。

这会奏效的-

代码语言:javascript
运行
复制
// webpack
module.exports = {
  mode: "production",
  entry: ["./app.js"],
  output: { filename: "./app.min.js" },
  resolve: { alias: { vue: "vue/dist/vue.js" } },
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: "babel-loader"
      },
      {
        test: /\.vue$/,
        use: "vue-loader"
      }
    ]
  }
};
代码语言:javascript
运行
复制
// app.js

import Vue from "vue";

// OR You do this if you dont want to use webpack alias
// import Vue from 'vue/dist/vue.js';

window.app = new Vue({
  el: "#app",
  data: { message: "Hello Vue!" },
  created() {
    console.log("<><><> Vue Created");
  }
});
代码语言:javascript
运行
复制
<!-- index.html -->

<html>
<head>
    <meta charset="utf-8">
</head>
<body>
<div id="app">
    <p>{{message}}</p>
</div>
<script src="app.min.js"></script>
</body>
</html>
票数 1
EN

Stack Overflow用户

发布于 2019-02-26 17:09:23

那是因为你的Webpack配置不完整。

如果您打开浏览器控制台,您将看到:

Vue警告:在模板编译器不可用的情况下,您使用的是仅运行时构建的Vue。要么将模板预编译成呈现函数,要么使用编译器包含的构建。

#wrapper中的html是一个模板,但是Vue不能编译(并使用它),因为您的构建包含仅运行时版本的Vue。

只需将其添加到webpack.config.js

代码语言:javascript
运行
复制
resolve: {
  alias: {
    'vue$': 'vue/dist/vue.esm.js'
  },
},

这将包括Vue的runtime+compiler构建。

票数 3
EN

Stack Overflow用户

发布于 2019-02-24 18:43:11

好吧那么,

这是正常的,因为编译后的版本如下所示:

代码语言:javascript
运行
复制
import Vue from 'vue';

// window.EventBus = new Vue();
window.app = new Vue({
    el: '#wrapper',
    data: {
        test: 'hello world'
    },
    created() {
        console.log('Vue Running');
    }
});

但是浏览器如何知道如何导入'vue‘呢?

您的编译版本尚未准备好浏览器,我认为您的构建配置是不正确的。

你能提供吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54831488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档