技术选项:
next.js + mysql + react + ant design + typeorm
首先在github创建项目,然后将git项目拉到本地
git clone xxx.nextjs-blog.git
然后进入项目目录
cd nextjs-blog
接着使用next.js提供的脚手架创建项目,这里我们使用typescript开发,所以使用typescript的模板
yarn create next-app --typescript
配置一下pretteric, 在根目录创建.pretteric文件
{"arrowParens": "always","bracketSameLine": true,"endOfLine": "lf","htmlWhitespaceSensitivity": "css","insertPragma": false,"jsxSingleQuote": false,"jsxBracketSameLine": false,"printWidth": 80,"proseWrap":"preserve","quoteProps": "as-needed","requirePragma": false,"semi": true,"singleQuote": true,"tabWidth": 2,"trailingComma": "es5","useTabs": false,"vueIndentScriptAndStyle": false,"parser": "babel"}
配置一下stylelintrc, 在根目录创建.stylelintrc.json
{"extends": "stylelint-config-standard-scss","rules": {"selector-class-pattern": "^[a-z][a-zA-Z0-9]+$"}}
配置babel,在根目录创建.babelrc
{"presets": ["next/babel"],"plugins": ["babel-plugin-transform-typescript-metadata",["@babel/plugin-proposal-decorators", { "legacy": true }],"@babel/plugin-proposal-class-properties"]}
配置typescript环境
{"compilerOptions": {"target": "es5","lib": ["dom", "dom.iterable", "esnext"],"allowJs": true,"skipLibCheck": true,"strict": true,"forceConsistentCasingInFileNames": true,"noEmit": true,"esModuleInterop": true,"module": "esnext","moduleResolution": "node","resolveJsonModule": true,"isolatedModules": true,"jsx": "preserve","incremental": true,"baseUrl": ".","experimentalDecorators": true,"emitDecoratorMetadata": true},"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],"exclude": ["node_modules"]}
接下来,看下next.js的路由
从上图可以看到
在pages目录下来创建文件夹,文件夹的名称就代表路由。
普通路由:
1.比如pages/index.js,那么这个的路由就是 根路由
2.比如在pages下面新建 blog文件夹,在blog文件夹下面新建index.js,那此时这个文件对应的页面利用就是/blog
嵌套路由:
1.在pages目录下新建blog目录,在blog目录下新建first-post.js,注意此时不是index.js,那此时的文件夹是嵌套的,那么对应的路由也是嵌套的,路由也是根据嵌套的文件夹的名称而来,所以这个first-post.js文件页面对应的路由就是/blog/first-post
动态路由:
动态路由在实际业务中非常常见,接下来看下next.js中提供的动态路由。
1.在pages目录下新建blog文件夹,在文件夹下 新建 [id].js,这个 [id] 就表示是动态路由,那展现的路由就是这个样子 /blog/:id ,这个里面的 :id 可以换成任意的路由,例如 /blog/1 , /blog/2
2.第二种是动态路由在中间,在pages目录下新建 [id] 文件夹,在[id]文件夹下面 创建setting.js, 那此时的动态路由就是 /:id/setting, :id 就是动态,例如 /1/setting, /2/setting
3.第三种动态路由是 任意匹配的路由,在pages目录下新建post文件夹,在post文件夹下面新建[…all].js,此时这个 […all]表现的动态路由就是 /post/ ,这个 就代表任意路由,丽日: /post/2020/id/title
