详解使用Next.js构建服务端渲染应用(7)
运行项目,首页变成:
增加了一点样式之后比之前好看了一点点。我们发现导航栏的样式并没有变。因为Header是一个独立的的component,component之间的样式不会相互影响。如果需要为导航增加样式,需要修改Header.js:
import Link from 'next/link'; const Header = () => ( <div> <Link href="/" rel="external nofollow" rel="external nofollow" > <a>Home</a> </Link> <Link href="/about" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > <a>About</a> </Link> <style jsx> {` a{ color:#EF141F; font-size:26px; line-height:40px; text-decoration:none; padding:0 10px; text-transform:uppercase; } a:hover{ opacity:0.8; } `} </style> </div> ) export default Header;
效果如下:
全局样式
当我们需要添加一些全局的样式,比如rest.css或者鼠标悬浮在a标签上时出现下划线,这时候我们只需要在style-jsx
标签上增加global
关键词就行了,我们修改Layout.js如下:
import Header from './Header'; const layoutStyle = { margin: 20, padding: 20, border: '1px solid #DDD' } const Layout = (props) => ( <div style={layoutStyle}> <Header /> {props.children} <style jsx global> {` a:hover{ text-decoration:underline; } `} </style> </div> ) export default Layout
这样鼠标悬浮在所有的a标签上时会出现下划线。
部署next.js应用
Build
部署之前我们首先需要能为生产环境build项目,在package.json中添加script:
"build": "next build"
接下来我们需要能启动项目来serve我们build的内容,在package.json中添加script:
"start": "next start"
然后依次执行:
npm run build npm run start
build完成的内容会生成到.next
文件夹内,npm run start
之后,我们访问的实际上就是.next
文件夹的内容。
运行多个实例
如果我们需要进行横向扩展(Horizontal Scale)以提高网站的访问速度,我们需要运行多个网站的实例。首先,我们修改package.json的start script: