Vercel部署NextJS Api时prettier-solidity插件找不到的问题咨询
Next.js API部署Vercel后找不到prettier-plugin-solidity插件的解决方法
问题场景
在Next.js的API函数中使用prettier格式化Solidity合约文件,本地运行完全正常,但部署到Vercel平台后,出现找不到prettier-plugin-solidity插件的错误。
原实现代码
const formattedContract = prettier.format(newContract, { parser: "solidity-parse", pluginSearchDirs: ["node_modules"], plugins: ["prettier-plugin-solidity"], }); fs.writeFileSync(`/tmp/${contractId}.sol`, formattedContract);
Vercel平台错误日志
[POST] /api/generateContract
14:03:48:05
2023-01-06T13:03:53.774Z 4a4f5046-e8e7-4f0c-8f28-514637b2accb ERROR Error: Cannot find module 'prettier-plugin-solidity'
Require stack:
- /var/task/node_modules/prettier/index.js
- /var/task/.next/server/pages/api/generateContract.js
- /var/task/node_modules/next/dist/server/next-server.js
- /var/task/___next_launcher.cjs
at Module._resolveFilename (node:internal/modules/cjs/loader:995:15)
at mod._resolveFilename (/var/task/node_modules/next/dist/build/webpack/require-hook.js:23:32)
at resolve (node:internal/modules/cjs/helpers:109:19)
at /var/task/node_modules/prettier/index.js:37772:25
at Array.map ()
at Object.load (/var/task/node_modules/prettier/index.js:37767:65)
at Object.load [as loadPlugins] (/var/task/node_modules/prettier/index.js:15932:23)
at /var/task/node_modules/prettier/index.js:37834:24
at Object.format (/var/task/node_modules/prettier/index.js:37850:12)
at handler (/var/task/.next/server/pages/api/generateContract.js:72:79) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/var/task/node_modules/prettier/index.js',
'/var/task/.next/server/pages/api/generateContract.js',
'/var/task/node_modules/next/dist/server/next-server.js',
'/var/task/___next_launcher.cjs'
]
}
解决步骤
最初尝试修改pluginSearchDirs为/或node_modules均无效,最终定位到问题根源:插件未被Next.js的打包工具包含到服务端构建产物的node_modules中。
只需在API文件顶部添加显式导入语句,即可触发打包工具将插件纳入服务端构建包:
import 'prettier-plugin-solidity';
内容的提问来源于stack exchange,提问作者ridiculis
相关产品推荐
相关产品推荐

