Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoCo_Code_Op2
next.js
提交
33ebda1b
N
next.js
项目概览
CoCo_Code_Op2
/
next.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
next.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
33ebda1b
编写于
7月 09, 2020
作者:
J
Jan Potoms
提交者:
GitHub
7月 09, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix root route optional catch-all prerendering (#14986)
Fixes
https://github.com/vercel/next.js/issues/14964
上级
62902545
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
117 addition
and
4 deletion
+117
-4
packages/next/build/index.ts
packages/next/build/index.ts
+5
-4
test/integration/dynamic-optional-routing-root-static-paths/next.config.js
...dynamic-optional-routing-root-static-paths/next.config.js
+1
-0
test/integration/dynamic-optional-routing-root-static-paths/pages/[[...optionalName]].js
...al-routing-root-static-paths/pages/[[...optionalName]].js
+18
-0
test/integration/dynamic-optional-routing-root-static-paths/test/index.test.js
...mic-optional-routing-root-static-paths/test/index.test.js
+93
-0
未找到文件。
packages/next/build/index.ts
浏览文件 @
33ebda1b
...
...
@@ -791,7 +791,7 @@ export default async function build(dir: string, conf = null): Promise<void> {
const
isSsgFallback
=
ssgFallbackPages
.
has
(
page
)
const
isDynamic
=
isDynamicRoute
(
page
)
const
hasAmp
=
hybridAmpPages
.
has
(
page
)
le
t
file
=
normalizePagePath
(
page
)
cons
t
file
=
normalizePagePath
(
page
)
// The dynamic version of SSG pages are only prerendered if the fallback
// is enabled. Below, we handle the specific prerenders of these.
...
...
@@ -826,11 +826,12 @@ export default async function build(dir: string, conf = null): Promise<void> {
// `getStaticPaths` (additionalSsgPaths).
const
extraRoutes
=
additionalSsgPaths
.
get
(
page
)
||
[]
for
(
const
route
of
extraRoutes
)
{
await
moveExportedPage
(
page
,
route
,
route
,
true
,
'
html
'
)
await
moveExportedPage
(
page
,
route
,
route
,
true
,
'
json
'
)
const
pageFile
=
normalizePagePath
(
route
)
await
moveExportedPage
(
page
,
route
,
pageFile
,
true
,
'
html
'
)
await
moveExportedPage
(
page
,
route
,
pageFile
,
true
,
'
json
'
)
if
(
hasAmp
)
{
const
ampPage
=
`
${
normalizePagePath
(
route
)
}
.amp`
const
ampPage
=
`
${
pageFile
}
.amp`
await
moveExportedPage
(
page
,
ampPage
,
ampPage
,
true
,
'
html
'
)
await
moveExportedPage
(
page
,
ampPage
,
ampPage
,
true
,
'
json
'
)
}
...
...
test/integration/dynamic-optional-routing-root-static-paths/next.config.js
0 → 100644
浏览文件 @
33ebda1b
module
.
exports
=
{}
test/integration/dynamic-optional-routing-root-static-paths/pages/[[...optionalName]].js
0 → 100644
浏览文件 @
33ebda1b
export
const
getStaticPaths
=
()
=>
({
paths
:
[
{
params
:
{
optionalName
:
[]
}
},
{
params
:
{
optionalName
:
[
'
one
'
]
}
},
{
params
:
{
optionalName
:
[
'
one
'
,
'
two
'
]
}
},
],
fallback
:
false
,
})
export
const
getStaticProps
=
({
params
})
=>
({
props
:
{
params
}
})
export
default
function
Page
({
params
})
{
return
(
<
div
id
=
"
success
"
>
{
params
.
optionalName
?
params
.
optionalName
.
join
(
'
,
'
)
:
'
yay
'
}
<
/div
>
)
}
test/integration/dynamic-optional-routing-root-static-paths/test/index.test.js
0 → 100644
浏览文件 @
33ebda1b
/* eslint-env jest */
import
cheerio
from
'
cheerio
'
import
fs
from
'
fs-extra
'
import
{
findPort
,
killApp
,
launchApp
,
nextBuild
,
nextStart
,
renderViaHTTP
,
}
from
'
next-test-utils
'
import
{
join
}
from
'
path
'
jest
.
setTimeout
(
1000
*
60
*
2
)
let
app
let
appPort
const
appDir
=
join
(
__dirname
,
'
../
'
)
function
runTests
()
{
it
(
'
should render optional catch-all top-level route with no segments
'
,
async
()
=>
{
const
html
=
await
renderViaHTTP
(
appPort
,
'
/
'
)
const
$
=
cheerio
.
load
(
html
)
expect
(
$
(
'
#success
'
).
text
()).
toBe
(
'
yay
'
)
})
it
(
'
should render optional catch-all top-level route with one segment
'
,
async
()
=>
{
const
html
=
await
renderViaHTTP
(
appPort
,
'
/one
'
)
const
$
=
cheerio
.
load
(
html
)
expect
(
$
(
'
#success
'
).
text
()).
toBe
(
'
one
'
)
})
it
(
'
should render optional catch-all top-level route with two segments
'
,
async
()
=>
{
const
html
=
await
renderViaHTTP
(
appPort
,
'
/one/two
'
)
const
$
=
cheerio
.
load
(
html
)
expect
(
$
(
'
#success
'
).
text
()).
toBe
(
'
one,two
'
)
})
}
const
nextConfig
=
join
(
appDir
,
'
next.config.js
'
)
describe
(
'
Dynamic Optional Routing
'
,
()
=>
{
describe
(
'
dev mode
'
,
()
=>
{
beforeAll
(
async
()
=>
{
appPort
=
await
findPort
()
app
=
await
launchApp
(
appDir
,
appPort
)
})
afterAll
(()
=>
killApp
(
app
))
runTests
()
})
describe
(
'
production mode
'
,
()
=>
{
beforeAll
(
async
()
=>
{
const
curConfig
=
await
fs
.
readFile
(
nextConfig
,
'
utf8
'
)
if
(
curConfig
.
includes
(
'
target
'
))
{
await
fs
.
writeFile
(
nextConfig
,
`module.exports = {}`
)
}
await
nextBuild
(
appDir
)
appPort
=
await
findPort
()
app
=
await
nextStart
(
appDir
,
appPort
)
})
afterAll
(()
=>
killApp
(
app
))
runTests
()
})
describe
(
'
serverless mode
'
,
()
=>
{
let
origNextConfig
beforeAll
(
async
()
=>
{
origNextConfig
=
await
fs
.
readFile
(
nextConfig
,
'
utf8
'
)
await
fs
.
writeFile
(
nextConfig
,
`module.exports = { target: 'serverless' }`
)
await
nextBuild
(
appDir
)
appPort
=
await
findPort
()
app
=
await
nextStart
(
appDir
,
appPort
)
})
afterAll
(
async
()
=>
{
await
fs
.
writeFile
(
nextConfig
,
origNextConfig
)
await
killApp
(
app
)
})
runTests
()
})
})
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录