Closed SenLief closed 2 years ago
这是个有趣的提议!
我也试了一下,并且查看了下issue貌似是因为包过大引起的,能否缩减一下包的体积呢?已经超过200m了。
日志中确实有提到包的体积过大的可能性:
[2022-03-28 16:51:05] 当前项目文件大小超过200MB,部署有可能会失败。如果失败建议使用 Webpack, Parcel 或 Layer 来减小项目文件大小后重试
但我想这不是导致编译失败的主要原因,更主要的原因是这里:编译过程载入next.config.js配置失败:
[2022-03-28 16:51:19] error - Failed to load next.config.js, see more info here https://nextjs.org/docs/messages/next-config-error [2022-03-28 16:51:19] [2022-03-28 16:51:19] > Build error occurred [2022-03-28 16:51:19] Error: Not supported [2022-03-28 16:51:19] at Object.loadConfig (/root/workspace/node_modules/next/dist/server/config.js:70:78) [2022-03-28 16:51:19] npm ERR! code ELIFECYCLE [2022-03-28 16:51:19] npm ERR! errno 1 [2022-03-28 16:51:19] npm ERR! notion-next@2.8.4 build:
next build && next-sitemap --config next-sitemap.config.js
[2022-03-28 16:51:19] npm ERR! Exit status 1
导致失败的原因是显而易见的:版本不兼容
腾讯云采用的NodeJS版本10.21.0,无法编译nextjs12.1.1的项目。至少需要12.22.0的版本,而我在开发环境的node版本就已经是 v16.13.0
了
[2022-03-28 16:50:45] npm WARN notsup Unsupported engine for next@12.1.1: wanted: {"node":">=12.22.0"} (current: {"node":"10.21.0","npm":"6.14.4"}) [2022-03-28 16:50:45] npm WARN notsup Not compatible with your version of node/npm: next@12.1.1 [2022-03-28 16:50:45] npm WARN notsup Unsupported engine for notion-client@4.16.0: wanted: {"node":">=12"} (current: {"node":"10.21.0","npm":"6.14.4"}) [2022-03-28 16:50:45] npm WARN notsup Not compatible with your version of node/npm: notion-client@4.16.0 [2022-03-28 16:50:45] npm WARN notsup Unsupported engine for notion-utils@4.16.0: wanted: {"node":">=12"} (current: {"node":"10.21.0","npm":"6.14.4"}) [2022-03-28 16:50:45] npm WARN notsup Not compatible with your version of node/npm: notion-utils@4.16.0 [2022-03-28 16:50:45] npm WARN notsup Unsupported engine for react-notion-x@4.16.0: wanted: {"node":">=12"} (current: {"node":"10.21.0","npm":"6.14.4"}) [2022-03-28 16:50:45] npm WARN notsup Not compatible with your version of node/npm: react-notion-x@4.16.0 [2022-03-28 16:50:45] npm WARN notsup Unsupported engine for styled-jsx@5.0.1: wanted: {"node":">= 12.0.0"} (current: {"node":"10.21.0","npm":"6.14.4"}) [2022-03-28 16:50:45] npm WARN notsup Not compatible with your version of node/npm: styled-jsx@5.0.1
只能是期待腾讯云更新一下版本吧 。而NextJS本就是Vercel官方推出的框架,故不存在此类兼容性问题。
看了下文档,nodejs的版本最高时支持到16.13的,但是不知道默认的版本为什么不能强制,如果选择api网关触发的是可以部署到16.13,不过我试了一下也没有成功。
开始怀疑时nextjs被限制了10.15,但是我新部署demo的可以部署到16.13,不知道什么情况。
另外这个触发方式在vercel属于哪一种触发部署?nextjs会定时拉取api?还是notion api会推送过来然后部署?
采用这个serverless.yml部署是可以部署的,不过访问不到。
component: http
name: nextDemo
inputs:
src:
dist: ./
hook: npm run build
exclude:
- .env
faas:
runtime: Nodejs16.13
framework: nextjs
name: ${name}
apigw:
protocols:
- http
- https
app: notion
我在后面换了其他版本的node测试仍然不行,原因应该是没有写入的权限,这个是平台的问题,腾讯的ssr只有对/tmp的写入权限,但是nextjs要向.next文件夹写入一个BUID,造成无法部署,所以说的对还是vercel吧。
之所以想换腾讯的,主要还是国内的访问速度上,部署的时候有海外加速,所以还蛮合适的。😄
优化国内的访问速度确实很重要,这个问题我持续关注一下,找找其他解决方案。
嗯,我用上面得手动部署了一下,是可以部署,只不过还是报错,应该是文件写入的问题。
部署调用失败的日志
日志:
START RequestId: 0a6fc635c0d72ed3e19ce67ce8483094
ready - started server on 0.0.0.0:9000, url: http://localhost:9000
Init Report RequestId: 0a6fc635c0d72ed3e19ce67ce8483094 Coldstart: 128ms (PullCode: 0ms InitRuntime: 1ms InitFunction: 127ms) Memory: 512MB MemUsage: 17.36MB
ready - started server on 0.0.0.0:3000, url: http://localhost:3000
[Error: EROFS: read-only file system, unlink '/var/user/.next/BUILD_ID'] {
errno: -30,
code: 'EROFS',
syscall: 'unlink',
path: '/var/user/.next/BUILD_ID'
}
ERROR RequestId: 0a6fc635c0d72ed3e19ce67ce8483094 Result: {"errorCode":-1,"errorMessage":"Process exited unexpectedly.","statusCode":439}
END RequestId: 0a6fc635c0d72ed3e19ce67ce8483094
Report RequestId: 0a6fc635c0d72ed3e19ce67ce8483094 Duration: 1469ms Memory: 512MB MemUsage: 117.74MB
我在后面换了其他版本的node测试仍然不行,原因应该是没有写入的权限,这个是平台的问题,腾讯的ssr只有对/tmp的写入权限,但是nextjs要向.next文件夹写入一个BUID,造成无法部署,所以说的对还是vercel吧。
确实如此,腾讯云函数环境不支持除开/tmp目录以外的文件读写。
嗯,比较奇怪的是我用官方的demo部署是可以部署的,但是部署这个就不行了,日志也不详细,所以说没办法。
修改启动脚本代码迁入/tmp目录,可以避开目录无法写入的问题:
[Error: EROFS: read-only file system, unlink '/var/user/.next/BUILD_ID'] {
scf_bootstrap
#!/bin/bash
pIDa=`/usr/sbin/lsof -i :9000|grep -v "PID" | awk '{print $2}'`
if [ "$pIDa" != "" ];
then
echo "1"
else
cp -r . /tmp
cd /tmp
export PORT=9000
/var/lang/node16/bin/node start.js
#node ./start.js
fi
start.js
#!/var/lang/node16/bin/node
console.log(__dirname)
const { nextStart } = require('next/dist/cli/next-start')
nextStart(['-p', '9000', '--hostname', '0.0.0.0'])
然而,成功部署,不代表就能正常使用😂,接口函数
腾讯云的路由有点坑,所有页面都是404
看来是没戏了,估计路由也是问题很大,重点应该还是匹配度不够了。
即便部署在腾讯云,也无法加快加载notion的内容,所以并不会快多少吧?
即便部署在腾讯云,也无法加快加载notion的内容,所以并不会快多少吧?
notion的部署是拉取到本地渲染的,相当于静态的博客。
部署到其他的serverless平台上,比如腾讯云的,也是支持nextjs的平台呢?