- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我正在使用的堆栈:Laravel
、Inertiajs
、React
我正在设置 Inertia SSR ,一切都已成功安装和编译。但是就在运行最终 Node 进程 (node public/js/ssr.js
) 时,我收到了这个错误:
Error [ERR_REQUIRE_ESM]: require() of ES Module E:\Websites\laravel\...\node_modules\swiper\swiper.esm.js from E:\Websites\laravel\...\public\js\ssr.js not supported.
Instead change the require of swiper.esm.js in E:\Websites\laravel\...\public\js\ssr.js to a dynamic import() which is available in all CommonJS modules.
但是客户端没有报错。为什么同一个包在客户端没有问题,而在服务端只有问题。
我想用最新的Swiper版本。
这是我的 laravel-mix 配置
// webpack.mix.js
mix.js('resources/js/app.js', 'public/js')
.react()
.postCss('resources/css/app.css', 'public/css', [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
])
.alias({
'@': 'resources/js',
})
.version();
// webpack.ssr.mix.js
mix.js('resources/js/ssr.js', 'public/js')
.options({ manifest: false })
.react()
.alias({ '@': path.resolve('resources/js') })
.alias({ ziggy: path.resolve('vendor/tightenco/ziggy/src/js') })
.webpackConfig({
target: 'node',
externals: [nodeExternals()],
})
最佳答案
如果您查看 swiper
NPM 包,那么它作为 ESM only module 发布。它不是 Common.js 模块。查看 swiper
包的以下 package.json
字段:
"type": "module",
"main": "./swiper.esm.js",
"module": "./swiper.esm.js",
它在客户端工作的原因是 - 你使用 Webpack 捆绑所有东西。 Webpack 然后负责将 AMD、Common.js、UMD 和 ES 模块与适当的 IIFE 包装器捆绑到一个文件中。因此,它永远不会给出错误。
服务器端的情况有点不同。在 Node.js 中,您不能使用 require()
函数导入 ESM 模块。在编译期间,您的所有 import
语句都会转换为 require()
调用,因为您的目标是服务器端代码的 node
。此外,由于您使用 webpack-node-externals
不捆绑通过 node_modules
可用的第三个模块,Webpack 不会将此包捆绑到您的服务器构建中。您可以通过将 swiper
添加到允许列表来告诉 Webpack 忽略除 swiper
之外的所有模块。
nodeExternals({
allowlist: [
'swiper'
]
})
这将告诉 Webpack 将 swiper
捆绑到服务器构建中,您将不再看到此错误。请注意,您可能必须为您使用的每个仅 ESM 模块执行此过程。
您也可以尝试为 swiper
包使用自定义 webpack 解析器,但由于您已经在使用 webpack-node-externals
,这是更简单的方法。
关于javascript - 错误 [ERR_REQUIRE_ESM] : require() of ES Module while using SSR (Inertiajs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72425265/
我正在使用带有 InertiaJS 堆栈的 Laravel 8。 我在路由和资源 Controller 上使用模型绑定(bind)。 是否可以惯性地在route()函数上发送多个参数? 我无法收到 t
我如何使用 laravel、Inertiajs2、vuejs3 捕获无效的 url?如果我创建文件 resources/views/errors/404.blade.php 它被触发了吗,但我不喜欢在
我正在尝试在 Laravel 8.38 - InertiaJS 0.8.4 上构建应用程序我正在使用 Vue 3作为我的前端堆栈。 我有多个布局,需要全局注册为 Vue组件,以便我可以在我的应用程序中
这是我正在使用的堆栈:Laravel、Inertiajs、React 我正在设置 Inertia SSR ,一切都已成功安装和编译。但是就在运行最终 Node 进程 (node public/js/s
大家好。我目前正在做拉威尔的一个项目。我正在使用带惯性的LALAVEL/微风VueJS。现在,在这个项目中,登录是使用Bootstrap模式组件完成的。验证和身份验证工作得很好我面临的唯一问题是,当成
我是一名优秀的程序员,十分优秀!