首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node_modules打包失败(Webpack或Browserify)

node_modules打包失败(Webpack或Browserify)
EN

Stack Overflow用户
提问于 2016-05-26 00:51:11
回答 3查看 1.3K关注 0票数 2

我正在尝试将我的node.js应用程序与webpack或browserify捆绑在一起,但我需要一些后端模块,如knex、书架和其他模块。

但是,webpack和browserify无法打包这些模块,因为他们用require()做了一些奇怪的事情……

我得到了这样的错误:Cannot find module 'sqlite3'Error: Cannot find module './dialects/postgres/index.js'

我不能忽略我的node_modules目录,因为我需要包中的模块,因为我不能访问将使用我的包的环境。(AWS Lambda)

我不需要webpack或browserify来优化我的node_modules,但我需要它们,有没有办法告诉webpack或browserify,只要捆绑node_module文件夹,并相信我,如果缺少一个需求?

编辑:我正在使用serverless来测试和部署我的lambda,唯一允许我在babel中使用ES2015的插件迫使我使用了webpack / browserify

谢谢您:)

EN

回答 3

Stack Overflow用户

发布于 2016-05-26 04:39:56

您可以将node_modules合并到您的Lambda包(包含您上传到Amazon Lambda中的代码的压缩文件)中,并且不需要对其进行打包(我的意思是使用Webpack或Browserify创建一个文件)。

有些节点模块不能在浏览器中使用,也不支持打包,因为它们使用了动态请求。他们可以有很好的理由这样做,特别是像书架或续集这样的or。

Webpack can manage simple dynamic requires,但它只适用于易于解析的规则。无论出于什么原因,如果你真的想使用webpack,你可以去看看ContextReplacementPlugin,但我不认为这是值得的。

票数 1
EN

Stack Overflow用户

发布于 2016-10-12 23:29:23

我确实遇到了这个问题,最终通过将以下内容添加到我的webpack配置中,让它与webpack (不了解browserify)一起工作:

代码语言:javascript
复制
{
  plugins: [
    new webpack.NormalModuleReplacementPlugin(/\.\.\/migrate/, '../util/noop.js'),
    new webpack.NormalModuleReplacementPlugin(/\.\.\/seed/, '../util/noop.js'),
    new webpack.IgnorePlugin(/mariasql/, /\/knex\//),
    new webpack.IgnorePlugin(/mssql/, /\/knex\//),
    new webpack.IgnorePlugin(/mysql/, /\/knex\//),
    new webpack.IgnorePlugin(/mysql2/, /\/knex\//),
    new webpack.IgnorePlugin(/oracle/, /\/knex\//),
    new webpack.IgnorePlugin(/oracledb/, /\/knex\//),
    new webpack.IgnorePlugin(/pg-query-stream/, /\/knex\//),
    new webpack.IgnorePlugin(/sqlite3/, /\/knex\//),
    new webpack.IgnorePlugin(/strong-oracle/, /\/knex\//),
    new webpack.IgnorePlugin(/pg-native/, /\/pg\//)
  ]
}

如果你像我一样使用serverless-webpack,你必须在你的项目中显式地npm安装普通的webpack模块,并在你的webpack配置文件中要求它。

这个配置是专门针对我的设置的,在这里我使用不带pg-native的postgres。忽略你不使用的模块。

这两个顶级插件不是webpack构建所必需的,但它们消除了大量恼人的警告。它们可能有点危险,因为它们可能会匹配knex以外的其他模块中的需求。如果不写自己的插件,我就找不到更好的方法了。

票数 1
EN

Stack Overflow用户

发布于 2019-04-18 22:46:15

我正在努力让webpack正确地捆绑knex,并想要分享我的配置。

相反,我们可以使用ContextReplacementPlugin来避免在使用webpack.IgnorePlugin时列出项目不需要的所有驱动程序。一个附带的好处是,它可以避免在其他模块中忽略这些包(正如@Erik Frisk提到的那样)。

例如,我使用带有mysql2驱动的mysql数据库,我的webpack配置如下所示:

代码语言:javascript
复制
  plugins: [
    new webpack.ContextReplacementPlugin(/knex\/lib\/dialects/, /mysql2\/index.js/),
  ]

这将只绑定node_modules/knex/lig/dialects/mysql2/index.js,而不包括其他方言,从而有效地忽略了其他包中的依赖性。

要查找有关ContextReplacementPlugin的更多信息,请查看Webpack’s ContextReplacementPlugin examples

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37443286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档