据我所知,核心模块(如“fs”)是node.js构建的一部分,不需要特殊配置即可导入,因此我不知道在www.example.com上运行时如何会缺少“fs”render.com。我在本地构建或运行开发模式时没有任何问题。该服务在render.com上部署和构建完美,但运行失败,原因如下:
Jan 31 01:13:22 PM ==> Starting service with 'node index.js'
Jan 31 01:13:23 PM internal/modules/cjs/loader.js:888
Jan 31 01:13:23 PM throw err;
Jan 31 01:13:23 PM ^
Jan 31 01:13:23 PM
Jan 31 01:13:23 PM **Error: Cannot find module 'node:fs'**
Jan 31 01:13:23 PM Require stack:
Jan 31 01:13:23 PM - /opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js
Jan 31 01:13:23 PM - /opt/render/project/src/node_modules/@fastify/send/index.js
Jan 31 01:13:23 PM - /opt/render/project/src/node_modules/@fastify/static/index.js
Jan 31 01:13:23 PM - /opt/render/project/src/index.js
Jan 31 01:13:23 PM at Function.Module._resolveFilename (internal/modules/cjs/loader.js:885:15)
Jan 31 01:13:23 PM at Function.Module._load (internal/modules/cjs/loader.js:730:27)
Jan 31 01:13:23 PM at Module.require (internal/modules/cjs/loader.js:957:19)
Jan 31 01:13:23 PM at require (internal/modules/cjs/helpers.js:88:18)
Jan 31 01:13:23 PM at Object.<anonymous> (/opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js:10:12)
Jan 31 01:13:23 PM at Module._compile (internal/modules/cjs/loader.js:1068:30)
Jan 31 01:13:23 PM at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
Jan 31 01:13:23 PM at Module.load (internal/modules/cjs/loader.js:933:32)
Jan 31 01:13:23 PM at Function.Module._load (internal/modules/cjs/loader.js:774:14)
Jan 31 01:13:23 PM at Module.require (internal/modules/cjs/loader.js:957:19) {
Jan 31 01:13:23 PM code: 'MODULE_NOT_FOUND',
Jan 31 01:13:23 PM requireStack: [
Jan 31 01:13:23 PM '/opt/render/project/src/node_modules/@fastify/send/lib/SendStream.js',
Jan 31 01:13:23 PM '/opt/render/project/src/node_modules/@fastify/send/index.js',
Jan 31 01:13:23 PM '/opt/render/project/src/node_modules/@fastify/static/index.js',
Jan 31 01:13:23 PM '/opt/render/project/src/index.js'
Jan 31 01:13:23 PM ]
Jan 31 01:13:23 PM }
在我今天部署了一个需要@fastify/static包的新版本之前,这个服务一直运行得很愉快,如下所示:
fastify.register(require('@fastify/static'), { root: path.join(__dirname,'public'), prefix:'/public/' })
我从不直接导入“fs”,但@fastify/static显然会这样做,如下所示:
const statSync = require('fs').statSync
我试着在导入@fastify之前显式导入fs,但是错误没有改变。Webpack没有涉及。我试着使用npm和yarn进行构建,没有区别-构建不应该影响核心模块。是不是有一些关键的环境设置我在www.example.com上忽略了Render.com?
1条答案
按热度按时间oxf4rvwz1#
Ronnie的评论(thks!)让我开始怀疑我关于“node:fs”和“fs”相同的假设是否正确。事实并非如此。Render.com默认为node.js版本14.17.0。“node:“模块引用语法直到后来的版本才被添加。
解决方案是render.com使用包含版本字符串的环境变量在www.example.com上请求节点版本16.0.0,并修复了错误。
render.com上的https://render.com/docs/node-version提供了指定版本的详细信息
核心模块语法的说明位于https://nodejs.org/api/modules.html