-
Notifications
You must be signed in to change notification settings - Fork 27k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Missing webpack dependency when using output standalone + custom server #64031
Comments
This comment has been minimized.
This comment has been minimized.
I have same issue. And I found the server.js which compiled with standalone can works. So I just copy these 2lines, and my custom server.js also works fine.
|
Here's my code, and while it works successfully, I'm not sure it's going to be a hidden problem import { createServer } from 'node:http';
import { parse } from 'node:url';
import NextServer from 'next/dist/server/next-server';
// @ts-ignore
import { config } from './.next/required-server-files.json';
import { NextConfig } from 'next';
const port = parseInt(process.env.PORT || '9000', 10);
const hostname = '0.0.0.0';
const dev = process.env.NODE_ENV !== 'production';
const app = new NextServer({
hostname: 'localhost',
port,
dir: process.cwd(),
dev,
conf: {
...(config as NextConfig),
},
});
const handle = app.getRequestHandler();
app.prepare().then(() => {
createServer((req, res) => {
try {
const parsedUrl = parse(req.url!, true);
handle(req, res, parsedUrl);
} catch (err) {
console.error('Error occurred handling', req.url, err);
res.statusCode = 500;
res.end('internal server error');
}
})
.once('error', (err) => {
logger.error(err);
process.exit(1);
})
.listen(port, () => {
console.log(
`> Server listening at http://${hostname}:${port} as ${
dev ? 'development' : process.env.NODE_ENV
}`,
);
});
}); |
I've met, too, frustrating Node.js v18.20.2
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
yarn run v1.22.19
$ NODE_ENV=production node ./server/main.js
node:internal/modules/cjs/loader:1140
const err = new Error(message);
^
Error: Cannot find module './bundle5'
Require stack: |
Already 3 months passed, there is still no any progress? 🫠 |
This comment has been minimized.
This comment has been minimized.
I confirmed that this works for me: #64031 (comment) then require it inside my lambda handler file. If I had more time I will figure out which particular parameter in the config made it work by commenting them out one at a time. |
Thanks @nectoscorp After I tested, it works 😂 |
I wish the nextConfig json was just saved on a file in like |
Having the same issue. This seems to work well for me to allow for both local dev development and docker deployment: const dev = process.env.NODE_ENV !== 'production'
if (!dev) {
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { config } = require('./.next/required-server-files.json')
process.env.__NEXT_PRIVATE_STANDALONE_CONFIG = JSON.stringify(config)
} |
The ES6-conform version:
|
I have the same issue but surprisingly in PM2 as local & VM's was working fine Can anyone summarize why this issue is ??
|
I found a universal way if adding missing dependencies to standalone output that I guess can also be used for custom server. You can have a look here: |
I also ran into this issue and came up with the exact same fix I put up a PR to fix this in next.js: #72966 |
## Fixing a bug ### Related issues fixes #64031 ### Why is this change needed Per the Next.js [docs](https://nextjs.org/docs/pages/api-reference/next-config-js/output) > Next.js' production server is also traced for its needed files and output at .next/next-server.js.nft.json which can be leveraged in production. When I tried doing this my [custom server](https://nextjs.org/docs/pages/building-your-application/configuring/custom-server) would crash on startup because of this codepath https://github.com/vercel/next.js/blob/canary/packages/next/src/server/config.ts#L1022 My first attempt at fixing this involved changing ``` if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) { ``` to ``` if (phase === PHASE_PRODUCTION_SERVER) { ``` but this is not guaranteed to work because the next.config.js and it's required dependencies may not be present causing the server to use the default config The best solution is to mimic standalone mode as closely as possible ### What does this change do This change allows a custom server running in production with only required files to pass in a preloaded next config (most likely from `required-server-files.json`) This is very similar to how the [standalone server works](https://github.com/vercel/next.js/blob/bc49287063d6afd50a7361566b14f1ab6c26b136/packages/next/src/build/utils.ts#L2142) ### Testing I'd like to get an initial round of feedback from the next team before I dive into writing an integration test. I patched nextjs in my repo and this solution worked
## Fixing a bug ### Related issues fixes #64031 ### Why is this change needed Per the Next.js [docs](https://nextjs.org/docs/pages/api-reference/next-config-js/output) > Next.js' production server is also traced for its needed files and output at .next/next-server.js.nft.json which can be leveraged in production. When I tried doing this my [custom server](https://nextjs.org/docs/pages/building-your-application/configuring/custom-server) would crash on startup because of this codepath https://github.com/vercel/next.js/blob/canary/packages/next/src/server/config.ts#L1022 My first attempt at fixing this involved changing ``` if (!process.env.__NEXT_PRIVATE_STANDALONE_CONFIG) { ``` to ``` if (phase === PHASE_PRODUCTION_SERVER) { ``` but this is not guaranteed to work because the next.config.js and it's required dependencies may not be present causing the server to use the default config The best solution is to mimic standalone mode as closely as possible ### What does this change do This change allows a custom server running in production with only required files to pass in a preloaded next config (most likely from `required-server-files.json`) This is very similar to how the [standalone server works](https://github.com/vercel/next.js/blob/bc49287063d6afd50a7361566b14f1ab6c26b136/packages/next/src/build/utils.ts#L2142) ### Testing I'd like to get an initial round of feedback from the next team before I dive into writing an integration test. I patched nextjs in my repo and this solution worked
Link to the code that reproduces this issue
https://github.com/maximelebastard/nextjs-issue-custom-server
To Reproduce
The issue is related to using the output: "standalone" with a custom server. See example repository.
npm install
thennpm run build
andnpm run start
Current vs. Expected behavior
Expected:
output: "standalone"
configuration innext.config.js
server.js
npm run build
and copy my custom server code to the build dir, the app is properly built and the file is properly copiedserver.js
, all the dependencies are present and the server startsActual:
.next/standalone/node_modules/next/dist/compiled/webpack/build5.js
does not exists in the built appserver.js
, I'm getting the error below because webpack tries to requirebuild5.js
Provide environment information
Operating System: Platform: darwin Arch: arm64 Version: Darwin Kernel Version 23.1.0: Mon Oct 9 21:27:24 PDT 2023; root:xnu-10002.41.9~6/RELEASE_ARM64_T6000 Binaries: Node: 20.12.0 npm: 10.5.0 Yarn: N/A pnpm: N/A Relevant Packages: next: 14.1.4 eslint-config-next: N/A react: 18.2.0 react-dom: 18.2.0 typescript: N/A Next.js Config: output: standalone
Which area(s) are affected? (Select all that apply)
Standalone mode (output: "standalone")
Which stage(s) are affected? (Select all that apply)
next start (local)
Additional context
A workaround I found is to disable standalone output.
That probably disables tree shaking and relies on the complete node_modules directory.
A big drawback is that it makes a heavy docker image.
The text was updated successfully, but these errors were encountered: