webpack:无法读取未定义的属性“匹配”

Posted

技术标签:

【中文标题】webpack:无法读取未定义的属性“匹配”【英文标题】:webpack: Cannot read property 'match' of undefined 【发布时间】:2018-03-03 07:20:17 【问题描述】:

我已经使用 npm 安装了 webpack (Symfony encore),如下所示:

sudo npm install -g @symfony/webpack-encore --save-dev

我从/var/www/project 运行这个

在处理 Windows 主机/Linux 来宾时,由于包管理器和共享文件夹的问题,我需要全局安装。

我无法将 webpack (node_modules) 安装在与 /var/www/project 相同的目录中(或在其下)

所以我的 package.json 文件看起来像这样:


  "name": "test",
    "version": "1.0.0",
  "description": "This is a test",
  "main": "index.js",
  "dependencies": ,
  "devDependencies": 
    "@symfony/webpack-encore": "^0.15.0"
  ,
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "author": "Alex",
    "license": "MIT"

我使用这个从/var/www/project 运行安可

/usr/local/bin/encore dev

我得到这个可爱的输出作为回报:

Running webpack ...

  TypeError: Cannot read property 'match' of undefined

  - index.js:125 parse
    [lib]/[webpack-encore]/[yargs-parser]/index.js:125:12

  - index.js:761 Function.Parser.detailed
    [lib]/[webpack-encore]/[yargs-parser]/index.js:761:10

  - yargs.js:938 Object.Yargs.self._parseArgs
    [lib]/[webpack-encore]/[yargs]/yargs.js:938:27

  - yargs.js:927 Object.get [as argv]
    [lib]/[webpack-encore]/[yargs]/yargs.js:927:19

  - index.js:725 Object.configureRuntimeEnvironment
    [lib]/[@symfony]/webpack-encore/index.js:725:54

  - index.js:770 Proxy.parameters
    [lib]/[@symfony]/webpack-encore/index.js:770:45

  - webpack.config.js:3 Object.<anonymous>
    /var/www/project/webpack.config.js:3:8

  - module.js:573 Module._compile
    module.js:573:30

  - module.js:584 Object.Module._extensions..js
    module.js:584:10

  - module.js:507 Module.load
    module.js:507:32

我错过了什么?

【问题讨论】:

【参考方案1】:

目前不支持全局安装webpack-encore。然而,错误消息并不是真正的解释性。

有一个问题可以改进此错误消息:https://github.com/symfony/webpack-encore/issues/36

你应该尝试在本地安装webpack-encore,这是真正的问题。

【讨论】:

我有点想通了——不幸的是,由于在使用 Windows 主机和 Linux 客户机时存在共享文件夹(符号链接)问题,webpack 似乎不喜欢“本地”安装。我在使用 php Composer 包管理器时遇到了类似的问题,最后通过更改二进制文件的位置解决了这个问题。我使用 --no-symlink 选项在 webpack 和 NPM 上取得了类似的成功(一天)。但这已经停止工作了。【参考方案2】:

configureRuntimeEnvironment 方法添加参数后,它开始为我工作:

Encore.configureRuntimeEnvironment('dev');

不知何故,如果你省略参数,错误就会不断出现。

【讨论】:

【参考方案3】:

简单的答案只需运行

rm -rf package-lock.json

【讨论】:

不,不应该。这是“推荐的解决方法”,但在实践中却令人难以置信。在package.json 中有一个锁定的依赖项并不能确保那个 依赖项的依赖项将保持一致,因此删除package-lock.json 文件、npm installing 并生成一个新的锁定文件*将允许 这些子依赖项发生变化,这通常会完全破坏任何未来的构建。使用现有的锁定文件通常是维护构建的唯一方法(毕竟这是文件的 POINT),因此完全删除它与它存在的原因背道而驰。 这个简短的回答给我留下了深刻的印象 简单评论:如果我想要它怎么办,因为 package-lock.json 有我知道的包的精确版本,不像 package.json 不提供特定版本。 很好的答案。谢谢。虽然在阅读 ans 之后我只是手动删除了 package-lock.json :) 正如@kevlarr 所说,当您依赖锁定文件时,这不是一个有效的解决方案(例如,当使用 npm ci 时,您必须有一个锁定文件)【参考方案4】:

尝试删除 package-lock.json 和 node_modules 文件夹,然后运行 ​​npm installyarn install

【讨论】:

【参考方案5】:

此消息的另一个原因可能是生成 package-lock.jsonnpm 主要版本与运行 npm install 的版本不匹配。

例如,如果锁定文件是使用npm@5 生成的,然后您尝试在npm@6 上使用npm install,因为可以说是次要的node@8 更新,您将看到此错误。

这里的解决方案就像其他答案中提到的那样,再次删除npm@6 上的node_modules package-lock.jsonnpm install。或者留在npm@5 上获取lockfile 并稍后安装。

【讨论】:

【参考方案6】:

自 Java 11 以来我也遇到了同样的问题。 尝试运行yarn install ...。 它对我有用。

【讨论】:

【参考方案7】:

如果您尝试使用锁定文件 npm install,您实际上可能正在寻找安装版本锁定依赖项的 npm ci 命令。

npm-ci 文档:https://docs.npmjs.com/cli/ci.html

【讨论】:

【参考方案8】:

试试下面的:

    删除或删除“node_modules”文件夹和“package-lock.json”文件。 在项目目录内的 CMD 或终端中运行npm install

问题应该解决了。

【讨论】:

【参考方案9】:

如果您在使用 NPM 时遇到问题,请使用 YARN。 (尤其是 Windows 用户)

但您必须先:

    切换前删除 node_modules 文件夹 如果您正在使用 Git bash 作为您的默认编辑器 - 我发现在我的系统上它只是播放不那么粗糙 确保您已按照本指南使用 Github (https://help.github.com/en/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) 在您的计算机上设置 SSH 密钥。不要跳过这一步,否则包将无法正确下载

此外,您可能想考虑使用 Laragon 来拥有标准化的开发环境,而不必确保自己安装了 WAMP 和各种好东西。

多年来,我一直在努力解决这个问题,想知道为什么有时事情不起作用。

我希望这对那里的人有所帮助。

【讨论】:

请同时阅读日志以确保在尝试运行“yarn install”时没有缺少依赖项,并使用“yarn add PACKAGE-NAME”手动添加它们【参考方案10】:

您需要从应用程序的根目录中删除package-lock.json。在此之后,您可以更新您的新软件包。

【讨论】:

【参考方案11】:

删除 package-lock.json 文件并通过命令 - npm install 重试安装。

【讨论】:

【参考方案12】:

使用此 cmd 命令删除 package-lock.json

rm -rf package-lock.json

【讨论】:

【参考方案13】:

试试“npm cache clean --force”

这将清除 nmp 缓存并可能解决您的问题

【讨论】:

感谢您的 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。【参考方案14】:

尝试在你的项目目录中重建 node-sass

npm 重建节点-sass

【讨论】:

以上是关于webpack:无法读取未定义的属性“匹配”的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误:在 webpack 重建 CommonsChunkPlugin 后无法读取未定义的属性“调用”

骨干木偶和 Webpack - 未捕获的类型错误:无法读取未定义的属性“收音机”

webpack TypeError:无法读取未定义的属性“已解决”

Webpack 4 css模块TypeError:无法读取未定义的属性“上下文”

模块构建失败:TypeError:无法读取未定义的属性“上下文” - Webpack

使用业力和 webpack 4 运行单元测试时无法读取未定义的属性“externalModuleIndicator”