我在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的实例。
有什么想法吗?
答案 0 :(得分:0)
更改导入可解决此问题:
didDeselectRowAt
无需更改Webpack配置。