const path = require('path'); const { slugify } = require('@vuepress/shared-utils') const highlight = require('@vuepress/markdown/lib/highlight') const translatePlugin = require('./markdown/translate') const headerPlugin = require('./markdown/header') const createSidebar = require('./markdown/createSidebar') const { simplifySlugText, tabs, getFormattedDate } = require('./utils') const copyOptions = require('./config/copy'); const nowString = getFormattedDate(); const changeLoaderOptions = (options, key = 'name') => { if (options && options[key]) options[key] = `${nowString}/${options[key]}`; return options; }; const base = '/uniCloud/' const config = { base, theme: 'vuepress-theme-uni-app-test', title: 'uniCloud', description: 'uniCloud Document', evergreen: process.env.NODE_ENV === 'development', head: [ ['link', { rel: 'shortcut icon', type: 'image/x-icon', href: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/icon.png?v=1556263038788' }], ['meta', { name: 'viewport', content: 'width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0' }], ['meta', { name: 'keywords', content: '数字天堂,前端开发,web开发,小程序开发,跨平台,跨平台开发,跨端开发,混合开发,serverless,云开发,云函数' }], ['script', { src: 'https://hm.baidu.com/hm.js?fe3b7a223fc08c795f0f4b6350703e6f' }], ['script', { src: '/miku-delivery-1.2.1.js' }], ['script', { src: `/js/miku.js?${Date.now()}&v=${Date.now()}&version=${Date.now()}` }] ], locales: { '/': { lang: 'zh-CN', } }, themeConfig: { titleLogo: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni-app.png', logo: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/logo.png', sidebar: createSidebar(tabs), sidebarDepth: 0, nextLinks: false, prevLinks: false, repo: 'dcloudio/uni-app', docsRepo: 'https://gitcode.net/dcloud/unidocs-unicloud-zh', docsBranch: 'master', docsDir: 'docs', editLinks: true, editLinkText: '帮助我们改善此页面!', lastUpdated: '上次更新', // smoothScroll: true, search: false, algolia: { apiKey: '2fdcc4e76c8e260671ad70065e60b2e7', indexName: 'zh-uniapp', appId: 'PQIR5NL8CZ', searchParameters: { hitsPerPage: 50 } }, isDevelopment: process.env.NODE_ENV === 'development' }, markdown: { // toc: { includeLevel: [1, 2, 3, 4] }, slugify (str) { if (typeof str !== 'string') return '' let slug = str if (slug.includes('@')) { let array = slug.split('@') slug = array.length > 1 ? array[array.length - 1] : str } else { slug = simplifySlugText(slug.toLowerCase()).trim() } return slugify(slug) }, extractHeaders: ['h1', 'h2', 'h3', 'h4'], chainMarkdown (config) { const extensionMap = { uts: 'ts' } config.options.highlight((str, lang) => { const extension = extensionMap[lang] return highlight(str, extension || lang) }) config .plugin('translate') .use(translatePlugin) .end() .plugin('convert-header') .use(headerPlugin) .end() .plugin('normallize-link') .use(require('./markdown/normallizeLink')) .end() .plugin('img-add-attrs') .use(require('./markdown/img-add-attrs')) .end() .plugin('attrs') .use(require('markdown-it-attrs'),[{ leftDelimiter: '#{', rightDelimiter: '}' }]) .end() .plugin('task-lists') .use(require('markdown-it-task-lists')) .end() .plugin('inject-json-to-md') .use(require('./markdown/inject-json-to-md')) .end() .plugin('markdown-it-raw-table') .use(require('markdown-it-raw-table')) .end() .plugin('add-base-to-md') .use(require('./markdown/add-base-to-md'), [{ base }]) } }, chainWebpack (config, isServer) { config.resolve.alias.set( '@theme-config', path.resolve(process.cwd(), 'docs/.vuepress/config') ) config.output.filename(`${nowString}/${config.output.get('filename')}`); //输出文件名 config.module.rule('images').use('url-loader').tap(changeLoaderOptions); config.module.rule('fonts').use('url-loader').tap(changeLoaderOptions); config.module.rule('media').use('url-loader').tap(changeLoaderOptions); config.module.rule('svg').use('file-loader').tap(changeLoaderOptions); if (!isServer && process.env.NODE_ENV === 'production') { const extract_css_plugin = config.plugin('extract-css'); const extract_css_plugin_args = extract_css_plugin.get('args'); if (extract_css_plugin_args) { extract_css_plugin.set( 'args', extract_css_plugin_args.map(item => changeLoaderOptions(item, 'filename') ) ); } } }, patterns: ['**/!(_sidebar).md', '**/*.vue'], plugins: [ ["vuepress-plugin-juejin-style-copy", copyOptions], [ 'named-chunks', { layoutChunkName: (layout) => 'layout-' + layout.componentName, pageChunkName: page => { const _context = page._context const pageHeaders = (page.headers || []).map(item => item.title).join(',') if (pageHeaders) { const originDescription = page.frontmatter.description || '' page.frontmatter = { ...page.frontmatter, description: `${_context.siteConfig.description ? `${_context.siteConfig.description},` : ''}${pageHeaders}${originDescription ? `,${originDescription}` : ''}`.slice(0, 150), } } const pagePath = page.path.indexOf('.html') === -1 ? page.path + 'index' : page.path const curPath = 'docs/' + pagePath.replace('docs/', '').substring(1).replace(/\.html/g, "") return curPath } } ] ], /** * * @param {string} path path: js 资源文件路径 * @param {string} type type: 资源文件类型,取值有 script 等 * @returns */ shouldPrefetch: (path, type) => { if (type === 'script') return path.includes('vendors~') || path.includes('layout-') || path.includes('index.') return false } } module.exports = config