[英]Next.js: Module build failed: Error: Cannot find module 'react-hot-loader/babel' from '/home/ugurkaya/Desktop'
[英]Next.js Scripts Error: Cannot find module '../../webpack-runtime.js'
我想使用 Next.js 创建 RSS 脚本。
所以我在根文件夹scripts/
的子文件夹中放置了一个脚本,并将其命名为build-rss.js
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.svg$/,
issuer: { and: [/\.(js|ts|md)x?$/] },
use: [
{
loader: '@svgr/webpack',
options: {
prettier: false,
svgo: true,
svgoConfig: { plugins: [{ removeViewBox: false }] },
titleProp: true,
},
},
],
})
if (!options.dev && options.isServer) {
const originalEntry = config.entry
config.entry = async () => {
const entries = { ...(await originalEntry()) }
entries['./scripts/build-rss'] = './scripts/build-rss.js'
return entries
}
}
if (!options.isServer) {
config.resolve.fallback.fs = false
}
return config
},
}
当我尝试运行我的脚本npm run build:development
时,它在package.json
中代表:
"scripts": {
"clean": "rimraf .next",
"dev": "next dev",
"export": "next export",
"start": "next start",
"lint": "next lint",
"build:development": "next build && npm run export && npm run rss:development",
"build": "next build && npm run export && npm run rss",
"rss:development": "node ./.next/server/scripts/build-rss.js",
"rss": "node ./.next/serverless/scripts/build-rss.js"
}
它抛出一个错误说:
错误:找不到模块 '../../webpack-runtime.js'
但我查过了。 该文件确实存在。
错误是这以前工作过。 可能在几个版本之前,当我的其他项目使用相同的组合时。
我做了一个完整的复制品来展示错误 → https://github.com/deadcoder0904/next-script-rss-error
只需克隆它,安装它并尝试在终端中运行脚本npm run build:development
以查看错误。
根据我们的谈话:
entry: path.join(__dirname, '..', 'path/to/file')
这就是 webpack 条目的样子。 它也可以是数组或对象:
entry: [
path.join(__dirname, '..', 'path/to/file'),
// other entries here
]
而您已经获得了整个 webpack 配置:
webpack: (config, options)
这样做:
const originalEntry = config.entry
config.entry = async () => {
const entries = { ...(await originalEntry()) }
entries['./scripts/build-rss'] = './scripts/build-rss.js'
return entries
}
如果你可以这样做,对我来说毫无意义:
config.entry.push('./scripts/build-rss')
// config.entry['./scripts/build-rss'] = './scripts/build-rss.js'
除非我错过了 nextjs 加载 webpack 配置的方式。
即便如此,我还是建议您使用path.join
以确保将其加载到正确的位置,因为该相对根将从编译 webpack 的任何位置执行。
除此之外,在你的第一个项目中你使用了 nextjs v10,现在你正在使用 nextjs v11,它从 webpack 4 升级到 5,这是一个重大升级。 我不知道细节,我只能推测,但在任何情况下,您都不应假设“因为您以前的项目正在运行,因此该项目应该使用相同的东西”,但不一定(尤其是在这种情况下)。
我认为的第一个直观的事情是 webpack 应该默认将所有内容捆绑到一个输出文件中,除非 nextjs 更改了它的配置(我不知道)。 因此,使用您添加到条目中的脚本对我来说没有意义,因为它不存在。 但是你说它确实存在,所以我只能假设 webpack 被配置为进行代码拆分并将每个条目输出到不同的文件。 在这种情况下,我不知道。 据我所知,在 webpack 5 中(我不知道 webpack 4)代码拆分在开发中被禁用并在生产中启用,因此您的问题可能是开发和生产之间的差异。
也许您可以尝试的最后一件事是更改您的!options.dev
,因为现在您只是在生产时添加该脚本,但您正在尝试使用开发运行该脚本。
如果你真的只需要让它工作,你可以将你的 nextjs 降级到你使用的以前的版本 (v10),即使这不是一个真正的解决方案。
除此之外,我没有想法。
不确定您是否仍在寻找答案,但简单地更改 webpack 条目如下似乎已解决问题。
entries['scripts/build-rss'] = './scripts/build-rss.js';
// instead of entries['./scripts/build-rss']
我有同样的错误! 我删除了.next
文件夹并做了npm run dev
,它开始为我工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.