运行捆绑了Webpack的Nodejs应用程序时发生错误

时间:2019-10-31 15:49:28

标签: node.js webpack service-worker

我在https://github.com/sbwrege2z/webpack-test有一个非常简单的应用程序。

这是主要应用程序的代码:

const UrlPattern = require('url-pattern');
const serviceWorkerRouter = require('service-worker-router');

const router = new serviceWorkerRouter.Router();

// THIS METHOD OF ROUTING DOES NOT CAUSE A PROBLEM:
router.get('/api/*', null);

// CAUSES BUNDLE TO BREAK:
router.get(new UrlPattern(/^\/api\/(.*)$/), null);

console.log('Hello world!');

使用“ node src / index.js”运行此文件时,您将获得预期的“ Hello world!”。输出。

当您使用“ node dist / bundle.js”运行由Webpack创建的捆绑包时,会出现错误:

TypeError: argument must be a regex or a string

如果用“ new UrlPattern(...)”注释掉该行,则该捆绑包将运行而不会出现任何问题。使用regex方法定义网址格式的操作导致此操作中断。

有人知道为什么会这样吗?


更新

我知道是什么引起了问题。我只是还没有想出一个解决方案。

UrlPattern构造函数期望将字符串或RegEx作为第一个参数。

Router的get方法期望第一个参数是字符串或URLPattern。如果第一个参数不是UrlPattern的实例,它将使用第一个参数创建一个新的UrlPattern。我确定假设是字符串或RegEx,但不会检查。

在缩小过程中,发生了一些事情,路由器无法将传递给get方法的第一个参数识别为UrlPattern,因此它尝试使用第一个参数(即UrlPattern)创建一个新的UrlPattern。由于UrlPattern构造函数的第一个参数既不是字符串也不是RegEx,因此会引发错误。

可能的解决方案:

弄清楚如何配置WebPack的缩小过程,以便将UrlPattern识别为UrlPattern的实例。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

更改导入可解决此问题:

didDeselectRowAt

无需更改Webpack配置。