热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用cooking搭建一个多页面易配置的Vue2项目(进阶篇)

通过上一篇文章的介绍,相信大家已经能用cooking配置一个较为完整的Vue项目。今天将通过配置一个多页面的例子为大家介绍cooking的命令行工具——cooking-cli,同样

通过 上一篇文章 的介绍,相信大家已经能用 cooking 配置一个较为完整的 Vue 项目。今天将通过配置一个多页面的例子为大家介绍 cooking 的命令行工具 —— cooking-cli,同样所需要的开发环境依旧是 Node 4+, npm 3+,同时我是在 macOS 下操作的。

搭建基础项目

现在我们需要在上一篇文章配置的项目的基础上,将它改造成支持多页面的项目,其实我们可以直接通过 cooking 的命令行工具直接生成一个 Vue 项目。首先需要全局安装 cooking-cli

npm i cooking-cli -g --registry=https://registry.npm.taobao.org

先检查下是不是使用的 npm 3+,如果不是先升级 npm 再安装。完成后可以到你的项目目录下执行下面指令创建一个目录名 multiple-pages 的 Vue 项目,第一次执行需要安装脚手架的依赖。

cooking create multiple-pages vue

如果没有访问较慢的话可以先配置下 npm 镜像,然后再创建项目。

cooking config registry https://registry.npm.taobao.org

接下来会让你选择一些选项,我们这次选择 Vue2 + bublé + 全局 cooking 的配置。

[20:01:54] Starting 'cooking-vue:default'...
[?] Give your app a name: multiple-pages
[?] Give your app a description: A vue project.
[?] Private? Yes
[?] What Vue version do you what? Vue 2
[?] What ES2015+ compiler do you what to use? bublé (only use wepback 2)
[?] What way use cooking do you want? Global cooking (webpack 2)
[?] Need dev server? Yes
[?] What CSS preprocessor do you want to use? Only CSS
[?] Setup unit tests with Karma + Mocha? No
[?] git repository:
[?] author:
[?] license: ISC
[?] Continue? Yes

最后可以试试直接运行 npm run dev 看看能不能正常启动。使用全局 cooking 的好处是可以减少项目的依赖,

多页面项目分析

如果用 webpack 做 SPA 项目,通常是一个入口文件,第三方库单独打包,或者一些文件可以抽离出去通过 CDN 加载。如果换成多页面,就需要多个入口文件,同时每个页面用到的第三方库也不相同,CDN 的配置也可能不一样。那么为了方便管理,我们可以将它们写在一个配置文件里。

webpack 虽然支持配置多个 chunk,但是哪些页面引入了哪些 common chunk 都需要手动维护,而且对于新手很容易犯错。所以我打算依旧只配置一个 vendor,同时将第三方库尽可能通过 CDN 的方式加载。这样手动维护 CDN 列表比维护 chunk 清晰且容易许多。

这里的 chunk 配置我使用 cooking 默认的,它会将 node_modules 内引用到的依赖都打包到 vendor 内,同时还有一个 manifest 用来保存 webpack 的 runtime,参考 vue webapck 模板。

设计配置文件

写一个名叫 app.json 的配置文件,每个入口共享公共的 CDN 也可以配置私有的 CDN,还可以配置其他基本信息。

{
"pages": [
{
"entry": "home",
"title": "首页",
"cdn": {}
},
{
"entry": "admin",
"title": "后台",
"cdn": {}
}
],
"basePath": "./src/pages/",
"cdn": {
"js": [
"//cdn.jsdelivr.net/vue/2.0.0-rc.7/vue.min.js",
"//cdn.jsdelivr.net/vuex/2.0.0-rc.5/vuex.min.js"
],
"css": []
},
"externals": {
"vue": "Vue",
"vuex": "Vuex"
}
}

同时我们在 src/pages 目录下创建 homeadmin 目录。每个目录下创建一个 index.jsapp.vue 文件。

index.js

import Vue from 'vue'
import App from './app'
new Vue({ // eslint-disable-line
el: '#app',
render: h => h(App)
})

app.vue


配置 cooking

入口文件

接下来我们在生成的 cooking 配置文件上加工下,这里我们要传入多入口的配置,从 app.json 里读取 entry 的信息,通过 basePath 拼接成文件路径。

var App = require('./app.json')
var path = require('path')
var entries = function() {
var result = {}
App.pages.forEach(p => {
result[p.entry] = path.resolve(App.basePath, p.entry)
})
return result
}
cooking.set({
entry: entries()
})

模板文件

所有入口的页面我们都是通过 index.tpl 模板配置,只需要将公用 CDN 和私有 CDN 合并后拼接成 HTML 插入到模板内,同时引入入口文件和 vendor,通过 html-webpack-plugin 的配置选项,可以很方便的实现我们的需求。

var App = require('./app.json')
var path = require('path')
var merge = function(a, b) {
return {
css: (a.css || []).concat(b.css || []),
js: (a.js || []).concat(b.js || [])
}
}
var templates = function() {
return App.pages.map(p => {
return {
title: p.title,
filename: p.entry + '.html',
template: path.resolve(__dirname, 'index.tpl'),
cdn: merge(App.cdn, p.cdn),
chunks: ['vendor', 'manifest', p.entry]
}
})
}
cooking.set({
template: templates()
})

模板文件也要改造一下,支持生成我们指定的 CDN 的 HTML 以及其他配置项。具体语法参考插件文档。






<% for (var i in htmlWebpackPlugin.options.cdn.css) { %>
"><% } %>



<% for (var i in htmlWebpackPlugin.options.cdn.js) { %>
<% } %>

最终配置

最后我们可以优化一下配置,将生成配置的函数提取到另一个文件内,让配置信息更清晰。那么最终的配置内容如下。

var path = require('path')
var cooking = require('cooking')
var build = require('./build')
cooking.set({
entry: build.entries(),
dist: './dist',
template: build.templates(),
devServer: {
port: 8081,
publicPath: '/',
},
clean: true,
hash: true,
sourceMap: true,
chunk: true,
publicPath: '/dist/',
extractCSS: true,
alias: {
'src': path.join(__dirname, 'src')
},
extends: ['vue2', 'buble', 'lint', 'autoprefixer'],
externals: build.externals()
})
module.exports = cooking.resolve()

运行项目

我们直接通过 cooking 命令行启动项目。

cooking watch -p

访问 http://localhost:8081/home.html 或者 http://localhost:8081/admin.html 看效果。

《用 cooking 搭建一个多页面易配置的 Vue 2 项目(进阶篇)》

最后我们通过 build 构建项目。

cooking build -p

总结

我会把上面的配置做成脚手架,可以直接通过 cooking init pages-vue 创建项目,当然只是做了最基础的版本,还可以扩展许多内容:

  • 比如配置某些页面可以忽略全局的 CDN 文件

  • 如果熟悉 chunk,那么把 chunk 也抽离到配置文件里

  • 给入口文件加开关,不一定每次启动都打包所有入口文件

  • 开发模式不使用 CDN,只有生产环境下才使用

如果感兴趣的话欢迎来一起维护,加入更多新功能。

这里只是介绍了 cooking 的命令行工具最基础的用法,还有许多实用的指令以及技巧还没介绍,所以下一篇见。


推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • SSL 错误:目标主机名与备用证书主题名称不匹配
    在使用 `git clone` 命令时,常见的 SSL 错误表现为:无法访问指定的 HTTPS 地址(如 `https://ip_or_domain/xxxx.git`),原因是目标主机名与备用证书主题名称不匹配。这通常是因为服务器的 SSL 证书配置不正确或客户端的证书验证设置有问题。建议检查服务器的 SSL 证书配置,确保其包含正确的主机名,并确认客户端的证书信任库已更新。此外,可以通过临时禁用 SSL 验证来排查问题,但请注意这会降低安全性。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • Git命令基础应用指南
    本指南详细介绍了Git命令的基础应用,包括如何使用`git clone`从远程服务器克隆仓库(例如:`git clone [url/path/repository]`)以及如何克隆本地仓库(例如:`git clone [local/path/repository]`)。此外,还提供了常见的Git操作技巧,帮助开发者高效管理代码版本。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南
    从零起步:使用IntelliJ IDEA搭建Spring Boot应用的详细指南 ... [详细]
author-avatar
mobiledu2502889217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有