node_modules打包失败(Webpack或Browserify)

我试图捆绑我的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文件夹,并相信我,如果需求缺失?

编辑:我使用无服务器来testing和部署我的lambda和唯一的插件,让我用babel强制我使用ES2015使用webpack / browserify

谢谢 :)

您可以将node_modules合并到您的Lambda包(包含您在Amazon Lambda中上传的代码的zip文件)中,而不需要将其打包(我的意思是使用Webpack或Browserify创build一个文件)。

一些节点模块并不意味着在浏览器中使用,并且不支持打包,因为它们使用dynamic需求。 他们可以有很好的理由去做,特别是书架或者Sequelize的ORM。

Webpack可以pipe理简单的dynamic需求 ,但它只适用于易于parsing的规则。 如果你真的想用任何理由使用webpack,你可以看看ContextReplacementPlugin,但是我不认为这是值得的。

我有这个确切的问题,最后得到它与webpack(不知道about browserify)通过添加到我的webpackconfiguration:

 { 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模块,并在你的webpackconfiguration文件中要求它。

这个configuration是专门为我的设置,我使用Postgres没有PG本机。 只要忽略你不使用的模块。

webpack构build不需要两个顶级插件,但是他们摆脱了大量恼人的警告。 他们可能有点危险,因为他们可以匹配需要在其他模块比knex。 我无法find一个更好的方式,而不必编写自己的插件。