Внешний вид Vue ElementUI Webpack с использованием CDN

Попробуйте настроить проект с Vue и ElementUI с помощью webpack4. Я хочу вытащить как Vue, так и ElementUI из CDN, поэтому у меня есть конфигурация веб-пакета ниже

module.exports = {
  mode: "development",
  entry: ["./app.js"],
  externals: {
    vue: "Vue",
    "element-ui": "ElementUI"
  },
  module: {
    rules: [
      {
        test: /.vue$/,
        use: "vue-loader"
      },
      {
        test: /.css$/,
        use: ["style-loader", "css-loader"]
      },
      {
        test: /.ttf$|.woff$/,
        use: [{ loader: "url-loader", options: { limit: 10000 } }]
      }
    ]
  }
};

мой html файл

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
  <title>Document</title>
  <style>
    [v-cloak] {
      display: none;
    }
  </style>
</head>

<body>
  <div v-cloak id="root">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.runtime.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/element-ui/2.3.4/index.js"></script>
  <script src="./dist/main.js"></script>
</body>

</html>

у моего app.js есть корневой экземпляр Vue

import Vue from "vue";
import ElementUI from "element-ui";
import Counter from "./Counter.vue";

Vue.use(ElementUI);

var app = new Vue({
  el: "#root",
  render: h => h(Counter)
});

Компонент счетчика ниже

<script>
export default {
  data() {
    return {
      counter: 0
    };
  },
  methods: {
    incement() {
      this.counter++;
    }
  }
};
</script>

<template>
  <div>
    <p><span>Count: </span>{{counter}}</p>
    <el-button @click="incement">Incement</el-button>
  </div>
</template>

Когда я открываю приложение в браузере, я получаю ошибку ниже

external_ "ElementUI": 1 Uncaught ReferenceError: ElementUI не определен в этой строке в js-файле, сгенерированном веб-пакетом, module.exports = ElementUI;

Что-то мне здесь не хватает? Vue external работает без проблем, есть проблемы только с пользовательским интерфейсом элемента


person PKool    schedule 13.04.2018    source источник
comment
Удалось ли вам это решить? Если да, напишите ответ   -  person Mark    schedule 10.06.2018


Ответы (1)


Конфигурация вашего webpack "element-ui": "ElementUI" сообщает webpack, что element-ui доступен как глобальная переменная ElementUI.

Webpack создает фрагмент кода module.exports = ElementUI;, чтобы всякий раз, когда вы импортируете (или запрашиваете w / e) element-ui, он возвращал эту глобальную переменную.

Теперь кажется, что ElementUI не существует в глобальной области, поэтому ошибка ReferenceError.
Сценарий ... element-ui / 2.3.4 / index.js добавляет глобальную переменную Element, поэтому попробуйте изменить конфигурацию веб-пакета с помощью "element-ui": "Element"

person Julien LB    schedule 22.10.2018
comment
Спасибо за это. Вы действительно добавили что-то ценное в Stackoverflow. Одно дополнение к вашему ответу; ElementUI также должен стать ELEMENT везде, где он появляется в app.js. @PKool - отметьте это как правильный ответ на ваш вопрос. - person jeff-h; 01.12.2018
comment
Спасибо, я ушел от этого. Но похоже что-то, что сработает. - person PKool; 14.03.2019