Next.js应用在批量授权版Microsoft Word中无法运行(IE11报错)求助
问题:Next.js应用无法在批量授权版Microsoft Word 2019中运行
Word 2019(Version 1808 Build: 10389.20033)内置IE11内核,运行Next.js应用时抛出以下未定义错误:
Error: 未定義のエラーです。(Undefined error.) { [functions]: , __proto__: { }, description: "未定義のエラーです。(Undefined error.)", message: "未定義のエラーです。(Undefined error.)", name: "Error", number: -2147467259, stack: "Error: 未定義のエラーです。(Undefined error.) at value (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:51576) at e (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:46612) at a (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:1502) at a (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:1347) at t.createRouter (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:29243) at Anonymous function (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:14052) at l (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:71920) at Anonymous function (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:71729) at Anonymous function (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js:1:72364) at k (https://**********/_next/static/chunks/main-ea5363f7b1817a1ef87a.js", Symbol()_g.k4lzz4di5i0: undefined, Symbol(ASSET_LOAD_ERROR)_15.k4lzz4di55: undefined, Symbol(mui.nested)_1d.k4lzz4di55: undefined, Symbol(nodejs.util.inspect.custom)_18.k4lzz4di55: undefined, Symbol(react.async_mode)_19.k4lzz4di55: undefined, Symbol(react.block)_z.k4lzz4di551: undefined, Symbol(react.concurrent_mode)_1a.k4lzz4di55: undefined, Symbol(react.context)_t.k4lzz4di5i0: undefined, Symbol(react.debug_trace_mode)_12.k4lzz4di55: undefined, Symbol(react.element)_n.k4lzz4di5i0: undefined, Symbol(react.forward_ref)_u.k4lzz4di5i0: undefined, Symbol(react.fragment)_p.k4lzz4di5i0: undefined, Symbol(react.fundamental)_1b.k4lzz4di55: undefined, Symbol(react.lazy)_x.k4lzz4di551: undefined, Symbol(react.legacy_hidden)_14.k4lzz4di55: undefined, Symbol(react.memo)_w.k4lzz4di551: undefined, Symbol(react.offscreen)_13.k4lzz4di55: undefined, Symbol(react.opaque.id)_11.k4lzz4di55: undefined, Symbol(react.portal)_o.k4lzz4di5i0: undefined, Symbol(react.profiler)_r.k4lzz4di5i0: undefined, Symbol(react.provider)_s.k4lzz4di5i0: undefined, Symbol(react.responder)_1c.k4lzz4di55: undefined, Symbol(react.scope)_10.k4lzz4di55: undefined, Symbol(react.server.block)_1e.k4lzz4di55: undefined, Symbol(react.strict_mode)_q.k4lzz4di5i0: undefined, Symbol(react.suspense)_v.k4lzz4di5i0: undefined, Symbol(react.suspense_list)_y.k4lzz4di551: undefined, Symbol(SSG_DATA_NOT_FOUND)_16.k4lzz4di55: undefined, Symbol(x)_17.k4lzz4di55: undefined }
即使是通过以下步骤创建的基础Next.js项目,在Word中运行也会报错,但在独立IE11浏览器中正常:
npx create-next-app@latest # app name: test cd test npm run build npm run start
解决方案
1. 配置Next.js兼容IE11内核
在项目根目录的next.config.js中添加以下配置,强制编译输出兼容IE11的代码:
module.exports = { // 禁用ES模块输出,改用IE11支持的CommonJS experimental: { esmExternals: false, }, // 转译Next.js核心包以兼容IE11 transpilePackages: ['next', 'react', 'react-dom'], webpack: (config) => { // 添加Babel转译规则,处理现代JS语法 config.module.rules.push({ test: /\.js$/, exclude: /node_modules\/(?!(next|react|react-dom)\/)/, use: { loader: 'babel-loader', options: { presets: [ ['@babel/preset-env', { targets: { ie: 11 } }], '@babel/preset-react' ], plugins: [ '@babel/plugin-proposal-class-properties', '@babel/plugin-transform-runtime' ] } } }); return config; } };
2. 添加必要的Polyfill
安装核心Polyfill包:
npm install core-js@3 regenerator-runtime
在pages/_app.js的最顶部引入Polyfill:
import 'core-js/stable'; import 'regenerator-runtime/runtime'; function MyApp({ Component, pageProps }) { return <Component {...pageProps} />; } export default MyApp;
3. 调整Word的IE兼容性设置
- 打开Word,依次进入「文件」→「选项」→「信任中心」→「信任中心设置」→「受信任的位置」,添加Next.js应用的部署URL为受信任站点;
- 打开Word的「Internet选项」,切换到「安全」标签,将部署URL添加到「受信任的站点」区域;
- 在「兼容性视图设置」中,将部署URL加入列表,强制Word使用IE11兼容模式加载页面;
- 确保「Internet选项」中「安全」→「自定义级别」里的JavaScript已启用,安全级别设为「中等」。
4. 禁用Next.js的现代特性
- 在
pages/_app.js中移除<React.StrictMode>包裹,避免IE11不支持的严格模式特性; - 避免使用React Suspense、Lazy Loading等IE11不完全支持的特性,或添加对应的Polyfill处理。
内容的提问来源于stack exchange,提问作者UK4
相关产品推荐
相关产品推荐

