繁体   English   中英

运行 Webpack 捆绑的 Nodejs 应用程序时出错

[英]Error when running a Webpack bundled Nodejs app

我在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(...)”注释掉该行,则捆绑包将毫无问题地运行。 使用定义 url 模式的正则表达式方法导致此错误。

有谁知道为什么会发生这种情况?


更新

我知道是什么导致了问题。 我只是还没有想出解决方案。

UrlPattern 构造函数需要一个字符串或 RegEx 作为第一个参数。

Router get 方法要求第一个参数是字符串或 URLPattern。 如果第一个参数不是 UrlPattern 的实例,它会使用第一个参数创建一个新的 UrlPattern。 我确信假设它是一个字符串或正则表达式,但它不检查。

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

可能的解决方案:

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

有任何想法吗?

更改导入可以解决问题:

const UrlPattern = require('service-worker-router').UrlPattern;

无需更改 Webpack 配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM