Vue的三种使用方式对比

Vue

一、Vue的三种使用方式对比

方式1:CDN引入(最简单)

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <!-- 引入Vue.js -->
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
    <p>{{ message }}</p>
    <button @click="count++">点击 {{ count }} 次</button>
  </div>

  <script>
    // 创建Vue应用
    const { createApp } = Vue;
    
    createApp({
      data() {
        return {
          message: 'Hello Vue!',
          count: 0
        }
      }
    }).mount('#app');
  </script>
</body>
</html>

方式2:ES模块导入(现代方式)

html 复制代码
<script type="module">
  // 通过CDN的ES模块版本
  import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  
  createApp({
    data() {
      return { message: 'Hello Vue 3!' }
    }
  }).mount('#app')
</script>

方式3:完整构建 vs 运行时构建

html 复制代码
<!-- 完整构建(包含编译器) - 可以在HTML中写模板 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- 运行时构建(更小) - 需要预编译模板(配合构建工具) -->
<script src="https://unpkg.com/vue@3/dist/vue.runtime.global.js"></script>

二、与jQuery/Bootstrap的CDN对比

基本CDN引入对比

html 复制代码
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

<!-- Bootstrap -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

<!-- Vue 3 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- Vue 2 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

版本选择CDN地址

html 复制代码
<!-- 指定确切版本(推荐生产环境) -->
<script src="https://unpkg.com/vue@3.4.21/dist/vue.global.js"></script>

<!-- 最新版本(可能变化) -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- 不同构建版本 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>  <!-- 生产版本(压缩) -->

三、实际项目中的组合使用

示例1:Vue + Bootstrap CDN(传统方式)

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <!-- Bootstrap CSS -->
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
  
  <!-- Vue 3 -->
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app" class="container mt-4">
    <!-- 使用Bootstrap样式 -->
    <div class="card">
      <div class="card-body">
        <h5 class="card-title">{{ title }}</h5>
        <p class="card-text">{{ description }}</p>
        
        <!-- Vue控制逻辑 -->
        <button class="btn btn-primary" @click="increment">
          点击 {{ count }} 次
        </button>
        
        <div v-if="showExtra" class="mt-3 alert alert-info">
          额外内容
        </div>
      </div>
    </div>
  </div>

  <script>
    const { createApp } = Vue;
    
    createApp({
      data() {
        return {
          title: 'Vue + Bootstrap',
          description: '通过CDN引入的示例',
          count: 0,
          showExtra: false
        }
      },
      methods: {
        increment() {
          this.count++;
          this.showExtra = this.count > 3;
        }
      }
    }).mount('#app');
  </script>
  
  <!-- Bootstrap JS(依赖Popper.js) -->
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

示例2:Vue + jQuery + Bootstrap(迁移场景)

html 复制代码
<!-- 注意:不推荐新项目这样用,但老项目迁移可能遇到 -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

<script>
  // Vue应用
  const app = Vue.createApp({
    data() {
      return { vueData: '来自Vue的数据' }
    }
  }).mount('#app');
  
  // jQuery代码(尽量少用,避免冲突)
  $(document).ready(function() {
    // 可能需要与Vue组件通信
  });
</script>

四、CDN地址大全

Vue官方CDN

html 复制代码
<!-- Vue 3 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- Vue 2(维护模式) -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

国内CDN(访问更快)

html 复制代码
<!-- BootCDN -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.4.21/vue.global.min.js"></script>

<!-- 字节跳动CDN -->
<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/3.2.31/vue.global.min.js"></script>

<!-- 七牛云 -->
<script src="https://staticfile.org/vue/3.4.21/vue.global.min.js"></script>

生产环境最佳实践

html 复制代码
<!-- 1. 使用特定版本 -->
<script src="https://unpkg.com/vue@3.4.21/dist/vue.global.prod.js"></script>

<!-- 2. 添加SRI完整性校验 -->
<script 
  src="https://unpkg.com/vue@3.4.21/dist/vue.global.prod.js"
  integrity="sha384-xxxx"
  crossorigin="anonymous">
</script>

<!-- 3. 添加备用CDN -->
<script>
  function loadVue() {
    const script = document.createElement('script');
    script.src = 'https://unpkg.com/vue@3/dist/vue.global.js';
    script.onerror = function() {
      // 主CDN失败,加载备用
      const backup = document.createElement('script');
      backup.src = 'https://cdn.jsdelivr.net/npm/vue@3/dist/vue.global.js';
      document.head.appendChild(backup);
    };
    document.head.appendChild(script);
  }
  loadVue();
</script>

五、对比总结:三种技术的CDN使用

特性 jQuery Bootstrap Vue
CDN引入 单JS文件 CSS + JS文件 单JS文件
全局变量 $jQuery bootstrap Vue (Vue 2) / 模块导出 (Vue 3)
体积 ~30KB ~200KB ~60KB
依赖 Popper.js(Bootstrap 5内嵌)
生产版本 .min.js .min.css + .min.js .prod.js
SRI支持

六、实际开发建议

何时使用CDN方式?

html 复制代码
✅ 适合场景:
1. 快速原型/演示
2. 小型项目
3. 学习/实验
4. 静态页面简单增强
5. 不构建工具的环境

❌ 不适合:
1. 大型SPA应用
2. 需要组件化的项目
3. 需要构建优化的生产环境
4. 团队协作项目

现代开发推荐方式

javascript 复制代码
// 对于正式项目,推荐使用构建工具
// 1. 使用Vite创建项目
npm create vue@latest

// 2. 在组件中按需引入
import { createApp } from 'vue'
import App from './App.vue'

// 3. 使用npm包管理依赖

CDN到构建工具的迁移

html 复制代码
<!-- CDN阶段(开始) -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<!-- 过渡阶段 -->
<script type="module">
  import { createApp } from './node_modules/vue/dist/vue.esm-browser.js'
</script>

<!-- 完整构建工具阶段 -->
// main.js
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')

七、完整示例:通过CDN创建Vue组件

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
  <style>
    .todo-item { margin: 5px 0; }
    .done { text-decoration: line-through; color: #999; }
  </style>
</head>
<body>
  <div id="app">
    <h1>待办事项 (CDN版本)</h1>
    
    <div>
      <input 
        v-model="newTodo" 
        @keyup.enter="addTodo"
        placeholder="输入待办事项"
      >
      <button @click="addTodo">添加</button>
    </div>
    
    <ul>
      <li v-for="(todo, index) in todos" :key="index" class="todo-item">
        <input type="checkbox" v-model="todo.done">
        <span :class="{ done: todo.done }">{{ todo.text }}</span>
        <button @click="removeTodo(index)">删除</button>
      </li>
    </ul>
    
    <p v-if="todos.length === 0">暂无待办事项</p>
    <p v-else>
      完成: {{ doneCount }} / 总计: {{ todos.length }}
    </p>
  </div>

  <script>
    const { createApp } = Vue;
    
    const app = createApp({
      data() {
        return {
          newTodo: '',
          todos: [
            { text: '学习Vue', done: true },
            { text: '学习CDN引入', done: false }
          ]
        }
      },
      computed: {
        doneCount() {
          return this.todos.filter(todo => todo.done).length;
        }
      },
      methods: {
        addTodo() {
          if (this.newTodo.trim()) {
            this.todos.push({
              text: this.newTodo.trim(),
              done: false
            });
            this.newTodo = '';
          }
        },
        removeTodo(index) {
          this.todos.splice(index, 1);
        }
      }
    });
    
    app.mount('#app');
  </script>
</body>
</html>

总结

*关键点:

  1. CDN适用:学习、演示、简单页面
  2. 构建工具适用:正式项目、生产环境
  3. 组合使用:Vue + Bootstrap CDN很常见
  4. 版本选择:生产环境要指定具体版本号

演进路径:

复制代码
初学者:CDN引入 → 学习Vue基础
进阶者:Vite/Vue CLI → 构建工具开发
项目实战:组件化 + 状态管理 + 路由

Vue的设计很灵活,既支持CDN快速上手,也支持完整的构建工具链,适合不同阶段和不同规模的项目需求。

相关推荐
阔皮大师4 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙4 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
寻找奶酪的mouse4 小时前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大4 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
We་ct4 小时前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
张3蜂5 小时前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
无小道5 小时前
Qt——事件简单介绍
开发语言·前端·qt
广州华水科技5 小时前
GNSS与单北斗变形监测技术的应用现状分析与未来发展方向
前端
code_YuJun5 小时前
corepack 作用
前端