Javascript 网页包错误-configuration.node具有未知属性';财政司司长';

Javascript 网页包错误-configuration.node具有未知属性';财政司司长';,javascript,node.js,webpack,antlr4,Javascript,Node.js,Webpack,Antlr4,我在使用最新版本的Webpack(5.1.0)时遇到错误。由于验证架构的限制性太强,配置似乎正在引发错误。这是我的网页配置文件的要点,以及我看到的错误消息 Webpack.config.js 错误 [webpack-cli] Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema. - configur

我在使用最新版本的Webpack(5.1.0)时遇到错误。由于验证架构的限制性太强,配置似乎正在引发错误。这是我的网页配置文件的要点,以及我看到的错误消息

Webpack.config.js

错误

[webpack-cli] 
Invalid configuration object. Webpack has been initialized using a configuration object that does not match the API schema.
 - configuration.node should be one of these:
   false | object { __dirname?, __filename?, global? }
   -> Include polyfills or mocks for various node stuff.
   Details:
    * configuration.node has an unknown property 'module'. These properties are valid:
      object { __dirname?, __filename?, global? }
      -> Options object for node compatibility features.
    * configuration.node has an unknown property 'net'. These properties are valid:
      object { __dirname?, __filename?, global? }
      -> Options object for node compatibility features.
    * configuration.node has an unknown property 'fs'. These properties are valid:
      object { __dirname?, __filename?, global? }
      -> Options object for node compatibility features.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! jstest@1.0.0 start: `webpack serve`
npm ERR! Exit status 2
我试图使用一个解析器生成器库(antlr4),它既可以在Node.js环境中工作,也可以在浏览器中工作。看起来库代码需要像fs这样的全局对象,如果为空,则假定它位于浏览器环境中。根据和,这是一个受支持的配置文件。但它不起作用。请帮忙

版本

  • 网页:5.1.0
  • webpack cli:4.0.0
  • Web包开发中间件:3.7.2
  • 网页包开发服务器:3.11.0
更新(2020年10月29日)


Antlr JavaScript文档现在已经用Webpack 5的新配置更新了

在Webpack团队的帮助下,我成功地实现了这一点。不再支持按照antlr4文档的建议使用以下网页包配置

不起作用

{
节点:{
财政司司长:‘空置’,
模块:“空”,
网络:“空”
}
}
工作配置

{
决心:{
回退:{
财政司司长:错
}
}
}
有了这个,我就可以让我的JavaScript解析器工作了


请注意,目前正在努力更新antlr4以生成基于ES6的代码。将来可能不需要此配置。

有趣的是,在出现
路径
(但不是
文件
)的情况下,我得到以下消息,更清楚webpack CLI:

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
    - add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
    - install 'path-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
    resolve.fallback: { "path": false }
BREAKING CHANGE:webpack<5默认情况下用于包含node.js核心模块的polyfill。
现在已经不是这样了。验证是否需要此模块并为其配置polyfill。
如果要包含多边形填充,需要:
-添加回退“resolve.fallback:{“path”:require.resolve(“path browserify”)}”
-安装“路径浏览”
如果不希望包含多边形填充,可以使用如下空模块:
resolve.fallback:{“路径”:false}

然而,在我看来,这个信息也应该在这里找到,并且删除了任何内置模块都可以用作属性的声明:

对于rails webpacker,如果您正在使用它,解决方案应该是:

在任何使用普通自定义配置的config/webpack/*.js中(有关更多信息,请参阅),只需添加解析和删除节点属性的代码

const{environment}=require(“@rails/webpacker”)
const customConfig={
决心:{
回退:{
dgram:错,
财政司司长:错,
网络:错,
tls:错,
child_进程:false
}
}
};
environment.config.delete('node.dgram')
environment.config.delete('node.fs')
environment.config.delete('node.net')
environment.config.delete('node.tls')
environment.config.delete('node.child\u process')
environment.config.merge(customConfig);
module.exports=环境

看起来您试图在浏览器中使用
fs
net
模块,这是不可能的。您是正确的-库试图
要求这些模块。如果它接收到一个空对象,则它假定它位于浏览器环境中。这就是库在Node.js环境和浏览器环境中的工作方式。看起来其他人已经能够在旧版本的Webpack中使用此功能。更好的解决方案是检查是否定义了
window
document
if(typeof window!=='undefined')…
如果未定义,则您处于node.js中。您同意这不是最佳行为。但是,这不在我的控制之下。此行为已在
antlr4
库包中实现。我只是一个尝试使用它的可怜的家伙。如果这是一个受支持的配置,我希望Webpack能够解决这个问题。这是一个巨大的问题,可能会产生影响,文档或v4到v5迁移文档中都没有关于这个问题的说明。。。请注意,此处示例中的
false
而不是
“empty”
也用于v4@tchakabam我正试图提交一份PR来更新文档。你能确认文件中的配置在Webpack 4中也不起作用吗?不,它实际上在Webpack 4中起作用。这个问题在我们迁移到v5时出现。在尝试将webpack 5与Next.js v10.2一起使用时出现了相同的问题,类似的配置用于webpack 4。