impl baseDir option for quartz build --serve for local testing
This commit is contained in:
		
							parent
							
								
									6681f28af0
								
							
						
					
					
						commit
						7b8017413c
					
				
							
								
								
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -1,12 +1,12 @@ | ||||
| { | ||||
|   "name": "@jackyzha0/quartz", | ||||
|   "version": "4.0.7", | ||||
|   "version": "4.0.8", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "@jackyzha0/quartz", | ||||
|       "version": "4.0.7", | ||||
|       "version": "4.0.8", | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "@clack/prompts": "^0.6.3", | ||||
|  | ||||
| @ -76,6 +76,7 @@ const BuildArgv = { | ||||
|   }, | ||||
|   baseDir: { | ||||
|     string: true, | ||||
|     default: "", | ||||
|     describe: "base path to serve your local server on", | ||||
|   }, | ||||
|   port: { | ||||
| @ -424,8 +425,26 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. | ||||
|       wss.on("connection", (ws) => connections.push(ws)) | ||||
|       const clientRefresh = () => connections.forEach((conn) => conn.send("rebuild")) | ||||
| 
 | ||||
|       if (argv.baseDir !== "" && !argv.baseDir.startsWith("/")) { | ||||
|         argv.baseDir = "/" + argv.baseDir | ||||
|       } | ||||
| 
 | ||||
|       await build(clientRefresh) | ||||
|       const server = http.createServer(async (req, res) => { | ||||
|         if (argv.baseDir && !req.url?.startsWith(argv.baseDir)) { | ||||
|           console.log( | ||||
|             chalk.red( | ||||
|               `[404] ${req.url} (warning: link outside of site, this is likely a Quartz bug)`, | ||||
|             ), | ||||
|           ) | ||||
|           res.writeHead(404) | ||||
|           res.end() | ||||
|           return | ||||
|         } | ||||
| 
 | ||||
|         // strip baseDir prefix
 | ||||
|         req.url = req.url?.slice(argv.baseDir.length) | ||||
| 
 | ||||
|         const serve = async () => { | ||||
|           await serveHandler(req, res, { | ||||
|             public: argv.output, | ||||
| @ -434,14 +453,15 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. | ||||
|           const status = res.statusCode | ||||
|           const statusString = | ||||
|             status >= 200 && status < 300 ? chalk.green(`[${status}]`) : chalk.red(`[${status}]`) | ||||
|           console.log(statusString + chalk.grey(` ${req.url}`)) | ||||
|           console.log(statusString + chalk.grey(` ${argv.baseDir}${req.url}`)) | ||||
|         } | ||||
| 
 | ||||
|         const redirect = (newFp) => { | ||||
|           newFp = argv.baseDir + newFp | ||||
|           res.writeHead(302, { | ||||
|             Location: newFp, | ||||
|           }) | ||||
|           console.log(chalk.yellow("[302]") + chalk.grey(` ${req.url} -> ${newFp}`)) | ||||
|           console.log(chalk.yellow("[302]") + chalk.grey(` ${argv.baseDir}${req.url} -> ${newFp}`)) | ||||
|           res.end() | ||||
|         } | ||||
| 
 | ||||
| @ -487,7 +507,11 @@ See the [documentation](https://quartz.jzhao.xyz) for how to get started. | ||||
|         return serve() | ||||
|       }) | ||||
|       server.listen(argv.port) | ||||
|       console.log(chalk.cyan(`Started a Quartz server listening at http://localhost:${argv.port}`)) | ||||
|       console.log( | ||||
|         chalk.cyan( | ||||
|           `Started a Quartz server listening at http://localhost:${argv.port}${argv.baseDir}`, | ||||
|         ), | ||||
|       ) | ||||
|       console.log("hint: exit with ctrl+c") | ||||
|       chokidar | ||||
|         .watch(["**/*.ts", "**/*.tsx", "**/*.scss", "package.json"], { | ||||
|  | ||||
| @ -6,7 +6,14 @@ import { pageResources, renderPage } from "../../components/renderPage" | ||||
| import { ProcessedContent, defaultProcessedContent } from "../vfile" | ||||
| import { FullPageLayout } from "../../cfg" | ||||
| import path from "path" | ||||
| import { FilePath, FullSlug, SimpleSlug, _stripSlashes, joinSegments, simplifySlug } from "../../util/path" | ||||
| import { | ||||
|   FilePath, | ||||
|   FullSlug, | ||||
|   SimpleSlug, | ||||
|   _stripSlashes, | ||||
|   joinSegments, | ||||
|   simplifySlug, | ||||
| } from "../../util/path" | ||||
| import { defaultListPageLayout, sharedPageComponents } from "../../../quartz.layout" | ||||
| import { FolderContent } from "../../components" | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user