UNPKG

vite-plugin-react-pages

Version:

<p> <a href="https://www.npmjs.com/package/vite-plugin-react-pages" target="_blank" rel="noopener"><img src="https://img.shields.io/npm/v/vite-plugin-react-pages.svg" alt="npm package" /></a> </p>

1 lines 21.5 kB
{"version":3,"file":"cli.mjs","sources":["../../src/node/constants.ts","../../src/node/static-site-generation/index.ts","../../src/node/cli.ts"],"sourcesContent":["import { resolve } from 'path'\nimport { fileURLToPath } from 'url'\n\nexport const PKG_ROOT = resolve(fileURLToPath(import.meta.url), '../../..')\nexport const CLIENT_PATH = resolve(PKG_ROOT, 'dist/client-bundles')\n","import { build as viteBuild } from 'vite'\nimport type { ResolvedConfig, Rollup } from 'vite'\nimport { minify } from 'html-minifier-terser'\nimport * as path from 'path'\nimport fs from 'fs-extra'\nimport { pathToFileURL } from 'node:url'\n\nimport { CLIENT_PATH } from '../constants'\nimport type { SSRPlugin } from '../../../clientTypes'\nimport type { staticSiteGenerationConfig } from '../types'\n\ntype RollupOutput = Rollup.RollupOutput\n\nconst minifyOptions = {\n keepClosingSlash: true,\n removeRedundantAttributes: true,\n removeStyleLinkTypeAttributes: true,\n useShortDoctype: true,\n minifyCSS: true,\n}\n\nexport async function ssrBuild(\n viteConfig: ResolvedConfig,\n argv: any,\n ssrConfig?: staticSiteGenerationConfig\n) {\n // ssr build should not use hash router\n // if (viteOptions?.define?.['__HASH_ROUTER__'])\n // viteOptions!.define!['__HASH_ROUTER__'] = false\n const root = viteConfig.root\n let outDir = viteConfig.build?.outDir ?? 'dist'\n outDir = path.resolve(root, outDir)\n await fs.emptyDir(outDir)\n\n const ssrOutDir = path.join(outDir, 'ssr-tmp')\n const clientOutDir = path.join(outDir, 'client-tmp')\n\n console.log('\\n\\npreparing vite pages ssr bundle...')\n const ssrOutput = await viteBuild({\n root,\n configFile: viteConfig.configFile,\n // mode: \"development\",\n build: {\n ssr: true,\n cssCodeSplit: false,\n rollupOptions: {\n input: path.join(CLIENT_PATH, 'entries', 'ssg-server.mjs'),\n // preserveEntrySignatures: 'allow-extension',\n output: {\n entryFileNames: '[name].mjs',\n chunkFileNames: '[name]-[hash].mjs',\n },\n onwarn(warning, defaultHandler) {\n // suppress warning like: /@react-pages/pages/guide/react/getting-started is dynamically imported by /@react-pages/pages but also statically imported by /@react-pages/ssrData, dynamic import will not move module into another chunk.\n if (\n warning.plugin === 'vite:reporter' &&\n warning.message.includes('/@react-pages/ssrData') &&\n warning.message.includes(\n 'dynamic import will not move module into another chunk'\n )\n )\n return\n defaultHandler(warning)\n },\n },\n outDir: ssrOutDir,\n minify: false,\n },\n ssr: {\n // `vite-pages-theme-doc/dist/index.js` have `import './index.css'`\n // so it needs to be bundled by vite before executed by node.js.\n // This is coupled to theme-doc,\n // but we don't want to ask users to put this in their vite config.\n // So let's put it here :)\n noExternal: ['vite-pages-theme-doc'],\n },\n })\n\n console.log('\\n\\nrendering html...')\n\n const ssrPluginPromises: Promise<SSRPlugin>[] = []\n ;(global as any)['register_vite_pages_ssr_plugin'] = (\n importSSRPlugin: () => Promise<SSRPlugin>\n ) => {\n ssrPluginPromises.push(importSSRPlugin())\n }\n process.env.VITE_PAGES_IS_SSR = 'true'\n\n const { renderToString, ssrData } = await import(\n pathToFileURL(path.join(ssrOutDir, 'ssg-server.mjs')).toString()\n )\n\n const ssrPlugins = await Promise.all(ssrPluginPromises)\n ssrPlugins.forEach((plugin, index) => {\n // validate ssr plugins\n if (!plugin?.id) {\n console.error('invalid ssr plugins:', ssrPlugins)\n throw new Error('invalid ssr plugin: no plugin id')\n }\n const idx = ssrPlugins.findIndex((p) => p.id === plugin.id)\n if (idx !== index) {\n console.error('invalid ssr plugins:', ssrPlugins)\n throw new Error(`duplicate ssr plugin: ${plugin.id}`)\n }\n })\n\n const pagePaths = Object.keys(ssrData)\n\n console.log('\\n\\npreparing vite pages client bundle...')\n const _clientResult = await viteBuild({\n root,\n configFile: viteConfig.configFile,\n build: {\n cssCodeSplit: false,\n rollupOptions: {\n input: path.join(CLIENT_PATH, 'entries', 'ssg-client.mjs'),\n preserveEntrySignatures: 'allow-extension',\n },\n assetsDir: 'assets',\n outDir: clientOutDir,\n },\n })\n let clientResult: RollupOutput\n if (Array.isArray(_clientResult)) {\n if (_clientResult.length !== 1)\n throw new Error(`expect viteBuild to have only one BuildResult`)\n clientResult = _clientResult[0]\n } else {\n clientResult = _clientResult as RollupOutput\n }\n\n const entryChunk = (() => {\n const _entryChunks = clientResult.output.filter((chunkOrAsset) => {\n return chunkOrAsset.type === 'chunk' && chunkOrAsset.isEntry\n })\n if (_entryChunks.length !== 1) {\n throw new Error(`Expect one entryChunk. Got ${_entryChunks.length}.`)\n }\n return _entryChunks[0]\n })()\n\n const cssChunks = clientResult.output.filter((chunk) => {\n return chunk.type === 'asset' && chunk.fileName.endsWith('.css')\n })\n\n const basePath = viteConfig.base ?? '/'\n\n const htmlCode = await fs.readFile(path.join(root, 'index.html'), 'utf-8')\n const RootElementInjectPoint = '<div id=\"root\"></div>'\n if (!htmlCode.includes(RootElementInjectPoint)) {\n throw new Error(\n `Your index.html should contain the RootElementInjectPoint: \"${RootElementInjectPoint}\" (it must appear exactly as-is)`\n )\n }\n const EntryModuleInjectPoint =\n '<script type=\"module\" src=\"/@pages-infra/main.js\"></script>'\n if (!htmlCode.includes(EntryModuleInjectPoint)) {\n throw new Error(\n `Your index.html should contain EntryModuleInjectPoint: \"${EntryModuleInjectPoint}\" (it must appear exactly as-is)`\n )\n }\n const CSSInjectPoint = '</head>'\n if (!htmlCode.includes(CSSInjectPoint)) {\n throw new Error(\n `Your index.html should contain CSSInjectPoint: \"${CSSInjectPoint}\" (it must appear exactly as-is)`\n )\n }\n\n await Promise.all(\n pagePaths.map(async (pagePath) => {\n // currently not support pages with path params\n // .e.g /users/:userId\n if (pagePath.match(/\\/:\\w/)) return\n const html = await renderHTML(pagePath)\n // TODO: injectPreload\n // preload data module for this page\n // html = injectPreload(html, \"path/to/page/data\")\n const writePath = path.join(\n clientOutDir,\n pagePath.replace(/^\\//, ''),\n 'index.html'\n )\n await fs.ensureDir(path.dirname(writePath))\n await fs.writeFile(writePath, html)\n if (pagePath !== '/') {\n // should write to both /pagePath/index.html and /pagePath.html\n const writePath2 = path.join(\n clientOutDir,\n pagePath.replace(/^\\//, '') + '.html'\n )\n await fs.ensureDir(path.dirname(writePath2))\n await fs.writeFile(writePath2, html)\n }\n })\n )\n\n const html404Path = path.join(clientOutDir, '404.html')\n // pass in a pagePath that won't match any defined page\n // so the render result will be 404 page\n const html404 = await renderHTML('/internal-404-page')\n await fs.writeFile(html404Path, html404)\n // move 404 page to `/` if `/` doesn't exists\n if (!pagePaths.includes('/')) {\n await fs.copy(html404Path, path.join(clientOutDir, 'index.html'))\n }\n\n await fs.copy(clientOutDir, outDir)\n await fs.remove(clientOutDir)\n await fs.remove(ssrOutDir)\n console.log('vite pages ssr build finished successfully.')\n return\n\n async function renderHTML(pagePath: string) {\n const { contentText, styleText } = renderToString(pagePath, ssrPlugins)\n const ssrInfo = {\n routePath: pagePath,\n }\n let html = htmlCode.replace(\n RootElementInjectPoint,\n // let client know the current ssr page\n `<script>window._vitePagesSSR=${JSON.stringify(ssrInfo)};</script>\n<div id=\"root\">${contentText}</div>`\n )\n const cssInject = cssChunks.map((cssChunk) => {\n return `<link rel=\"stylesheet\" href=\"${basePath}${cssChunk.fileName}\" />`\n })\n cssInject.push(styleText)\n\n html = html.replace(\n CSSInjectPoint,\n `${cssInject.join('\\n')}\n${CSSInjectPoint}`\n )\n html = html.replace(\n EntryModuleInjectPoint,\n `<script type=\"module\" src=\"${basePath}${entryChunk.fileName}\"></script>`\n )\n\n const minifyHtml = argv?.minifyHtml ?? ssrConfig?.minifyHtml ?? true\n if (minifyHtml) {\n const minifiedHtml = await minify(html, minifyOptions)\n return minifiedHtml\n }\n\n return html\n }\n}\n\nconst injectPreload = (html: string, filePath: string) => {\n const tag = `<link rel=\"modulepreload\" href=\"${filePath}\" />`\n if (/<\\/head>/.test(html)) {\n return html.replace(/<\\/head>/, `${tag}\\n</head>`)\n } else {\n return tag + '\\n' + html\n }\n}\n","import chalk from 'chalk'\nimport fs from 'fs-extra'\nimport minimist from 'minimist'\nimport path from 'node:path'\nimport { resolveConfig } from 'vite'\nimport type { InlineConfig } from 'vite'\nimport { PKG_ROOT } from './constants'\nimport { ssrBuild } from './static-site-generation'\nimport type { staticSiteGenerationConfig } from './types'\n\nconst argv: any = minimist(process.argv.slice(2))\n\nconsole.log(\n chalk.cyan(\n `vite-pages v${\n fs.readJSONSync(path.resolve(PKG_ROOT, 'package.json')).version\n }`\n )\n)\n// console.log(chalk.cyan(`vite v${require('vite/package.json').version}`))\n\n// cli usage: vite-pages ssr [root] [--minifyHtml] [vite options like: --configFile, --base, --logLevel, --mode, --build.outDir, etc.]\nconst [command, root] = argv._\nif (root) {\n argv.root = root\n}\n\n// make `--minifyHtml=false` to be treated as boolean false instead of string \"false\"\nObject.entries(argv).forEach(([key, value]) => {\n if (value === 'false') argv[key] = false\n})\n\n// console.log('@@argv', argv)\n;(async () => {\n if (!command || command === 'ssr') {\n const toBeResovledConfig: InlineConfig = {\n ...argv,\n }\n\n // user can pass in vite config like --outDir or --configFile\n const viteConfig = await resolveConfig(\n toBeResovledConfig,\n 'build',\n 'production',\n 'production'\n )\n const thisPlugin = viteConfig.plugins.find((plugin) => {\n return plugin.name === 'vite-plugin-react-pages'\n })\n //@ts-expect-error\n const ssrConfig = thisPlugin?.vitePagesStaticSiteGeneration as\n | staticSiteGenerationConfig\n | undefined\n\n await ssrBuild(viteConfig, argv, ssrConfig).catch((err: any) => {\n console.error(chalk.red(`ssr error:\\n`), err)\n process.exit(1)\n })\n } else {\n console.error(\n `[vite-pages] Invalid command. CLI usage: vite-pages ssr [root] [--minifyHtml] [vite options like: --configFile, --base, --logLevel, --mode, --build.outDir, etc.]`\n )\n }\n})()\n"],"names":["PKG_ROOT","resolve","fileURLToPath","import","meta","url","CLIENT_PATH","minifyOptions","keepClosingSlash","removeRedundantAttributes","removeStyleLinkTypeAttributes","useShortDoctype","minifyCSS","ssrBuild","viteConfig","argv","ssrConfig","root","outDir","build","path","fs","emptyDir","ssrOutDir","join","clientOutDir","console","log","viteBuild","configFile","ssr","cssCodeSplit","rollupOptions","input","output","entryFileNames","chunkFileNames","onwarn","warning","defaultHandler","plugin","message","includes","minify","noExternal","ssrPluginPromises","global","importSSRPlugin","push","process","env","VITE_PAGES_IS_SSR","renderToString","ssrData","pathToFileURL","toString","ssrPlugins","Promise","all","forEach","index","id","error","Error","idx","findIndex","p","pagePaths","Object","keys","_clientResult","preserveEntrySignatures","assetsDir","clientResult","Array","isArray","length","entryChunk","_entryChunks","filter","chunkOrAsset","type","isEntry","cssChunks","chunk","fileName","endsWith","basePath","base","htmlCode","readFile","RootElementInjectPoint","EntryModuleInjectPoint","CSSInjectPoint","map","pagePath","match","html","renderHTML","writePath","replace","ensureDir","dirname","writeFile","writePath2","html404Path","html404","copy","remove","contentText","styleText","ssrInfo","routePath","JSON","stringify","cssInject","cssChunk","minifyHtml","minifiedHtml","minimist","slice","chalk","cyan","readJSONSync","version","command","_","entries","key","value","toBeResovledConfig","resolveConfig","thisPlugin","plugins","find","name","vitePagesStaticSiteGeneration","catch","err","red","exit"],"mappings":"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"}