时间:2023-04-30 00:30:01 | 来源:网站运营
时间:2023-04-30 00:30:01 来源:网站运营
静态站点生成:Gridsome 是一个免费、开源、基于Vue.js 技术栈的静态网站生成器。静态网站生成器:
官网: https://gridsome.org
// 安装npm install --global @gridsome/cli// 创建项目gridsome create <project> 1. Install dependencies 时,Ctrl + c 打断 2. rm -rf node_modules 3. npm install cd <project>// 启动windowgridsome develop // localhost:8080或npm run develop
gridsome 依赖 sharp 模块,处理图片。它包含C++,很难安装。// 先安装 sharpnpm config set sharp_binary_host "https://npm.taobao.org/mirrors/sharp"npm config set sharp_libvips_binary_host "https://npm.taobao.org/mirrors/sharp-libvips"// 安装 gridsome时自动安装 sharp// npm install sharp
安装 sharp 依赖的 C++ 环境npm install --global --production windows-build-tools// 必须要安装Python 进行编译,windows-build-tools 中有
// 安装静态服务npm install -g serve// 执行部署的目录serve dist// 通过 npm run build 打包的文件,可以直接部署到服务器上
// gradsome.config.js
官方文档 configjs // gridsome.server.js api.createPages(({ createPage}) => { createPage({ path: '/user/:id(//d+)', component: './src/templates/User.vue' }) })
// Index.vuemetaInfo: { tutle: '', meta: [ {name: '', content: ''} ]}
404页面: src/pages/404.vue// 第三方模拟测试接口jsonplaceholder.typicode.com
集合用于承载数据,gridsome 运用模板将集合渲染成页面。// gridsome.server.jsconst axios = require('axios')module.exports = function (api) { api.loadSource(({ addCollection }) => { const collection = addCollection('Post') const { data } = await axios.get('jsonplaceholder.typicode.com/posts') for(const item in data){ collection.addNode({ id: item.id, title: item.title, content: item.body }) } })}
GraphQL: 一种用于 API 的查询语言。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据。
// localhost:8080/__explorequery { post (id: 2){ id title }}
// 页面中<div>{{ $page.books }}</div><page-query> query{ books: allBooks{ } }</page-query>// 组件中<static-query> query{ }</static-query>// 页面链接<g-link></g-link>
// template/Post.vue<g-link :to="$page.post.path"></g-link><page-query> query($id: ID!){ // ID类型,不能为空 post (id: $id){ id title content path } }</page-query>// gridsome.config.jsmodule.exports = { templates: { Post: [ { path: '/posts/:id', component: './src/templates/Post.vue' } ] }}
// 创建项目gridsome create blog-with-gridsome// 启动 npm run develop
git clone https://github.com/cuihuale2021/startbootstrap-clean-blog.git --depth=1 #使用最新版本// 放到同一个编辑器中cd startbootstrap-clean-blog/code -a .
static 文件夹下的图片不会进行打包编译。它是直接暴露给服务端的,引用时 “/img/abc.png”npm install @gridsome/source-filesystem// 配置插件 gridsome.config.jsmodule.exports = { siteName: 'Gridsome', plugins: [ { use: '@gridsome/source-filesystem', options: { typeName: 'BlogPost', path: './content/blog/**/*.md', } } ]}// 安装转换器npm install @gridsome/transformer-remark // 将 md 文件转为 html
通用的内容管理系统,后台管理文章博客文章,商品,用户评论,用户等。
官网: http://strapi.io
// 安装npx create-strapi-app my-app --quickstart
在创建好的后台管理系统中,添加字段、编辑内容。localhost:1337/posts
// 登录localhost:1337/auth/local// 接口测试localhost:1337/posts
// 安装 GraphQLyarn strapi install graphqlnpm run strapi install graphqlstrapi install graphql // 已全局安装 strapi
可视化安装:// 访问npm run developlocalhost:1337/graphql
// 在 gridsome 中使用插件npm install @gridsome/source-strapi// 在 gridsome.config.js 中配置插件
重启服务,拉取最新数据// index.vuequery ($page: Int){ posts: allStrapiPost(perpage: 2, page: $page) @paginate{ // perpage 每页多少条 page 当前页 pageInfo { totalPages currentPage } edges { // 数据 } }}// 分页页码的显示import { Pager } from 'gridsome' //... components: { Pager }// 使用组件<Pager :info="$page.posts.pageInfo" />
// gridsome.config.jstemplates: { StrapiPost: [ // 集合的名字 source-strapi 生成的, typeName + contentTypes { path: '/post/:id', component: './src/templates/Post.vue' } ]}
/换成/ a链接会刷新页面query($id: ID!){ // 文章id 为 ID类型,非空 post: strapiPost(id: $id){ // 设置别名为 post // ... }}// 封面图:style = "{ backgroundImage: `url(http://localhost:1337${ $page.post.cover.url })`}"// 文章内容v-html="$page.post.content"
npm install markdown-it// 使用var MarkdownIt = require('markdown-it'),md = new MarkdownIt()methods: { mdToHtml(content) { return md.render(content) }}v-html="mdToHtml( $page.post.content )"
// sourc-strapi 中配置contentTypes: ['post', 'tag']
查询、遍历到模板// source-strapi 插件配置singleTypes: ['general'],
查询、赋值// 安装 axiosnpm install axios
// strapi config/database.jsclient: "" // 默认使用“sqlite” 数据库,可以改为 Mongodb, mysql// 官网 mysql 的配置选项
strapi 部署的服务器,和数据库同一个服务器的话, host 为 “localhost”// 安装mysqlnpm install mysql
代码提交到gitee 或 github, 在服务器远程拉取下载git clone xxxxcd xxx/npm install npm run buildnpm run start// 持久运行 pm2 start npm -- run start --name blog-backend// 访问xxx.xx:1337/admin
设置接口、权限、测试接口// gridsome.config.jsapiUrl: '', // 远程strapi地址
可以创建环境变量: .env.development 和 .env.production 文件// 客户端访问GRIDSOME_API_URL = ""apiUrl: process.env.GRIDSOME_API_URL
Vue.mixin() 将环境变量混入到实例,全局使用1. Vercel ——> 项目 ——> Settings ——> Deploy Hooks ——> 创建并复制2. Strapi ——> 设置 ——> webhook
关键词:静态