2016-05-25 71 views
2

我試圖綁定我的node.js應用程序與webpack或browserify,但我需要一些後端模塊,如knex,書架等。node_modules打包失敗(Webpack或Browserify)

不過的WebPack和browserify失敗,因爲他們做一些奇怪的東西,有需要()來包裝這些模塊...

我有這幾樣的錯誤:Cannot find module 'sqlite3'Error: Cannot find module './dialects/postgres/index.js'

我不能忽視我node_modules目錄,因爲我需要包中的模塊,因爲我無法訪問我的包將被使用的環境。 (AWS Lambda)

我不需要webpack或browserify來優化我的node_modules,但我需要它們,是否有辦法告訴webpack或browserify只捆綁node_module文件夾並相信我,如果缺少require?

編輯:我使用的是無服務器測試和部署我的lambda表達式,唯一的插件,允許我使用ES2015與巴貝爾強迫我用的WebPack/browserify

謝謝:)

+0

你可以導入這些模塊,通常你不需要捆綁整個模塊dir – vicodin

+0

我有完全相同的問題。你最終找到了解決方案嗎? –

回答

1

您可以將(包含您在Amazon Lambda中上傳的代碼的zip文件)中的node_modules,並且不需要對其進行打包(我的意思是使用Webpack或Browserify創建文件)。

某些節點模塊並不打算在瀏覽器中使用,並且不支持打包,因爲它們使用動態需求。他們可以有很好的理由去做,特別是書架或Sequelize的ORM。

Webpack can manage simple dynamic requires,但它只適用於易於解析的規則。如果你真的想用任何理由使用webpack,你可以看看ContextReplacementPlugin,但我認爲這不值得。

+0

我爲我的問題添加了更多的上下文,以及我使用webpack/browserify的原因 – Titozzz

1

我有這個確切的問題,終於得到了它的WebPack(不知道browserify)合作,加入這個對我的WebPack配置:如果您使用無服務器-的WebPack像我

{ 
    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\//) 
    ] 
} 

,你必須明確npm在你的項目中安裝普通的webpack模塊,並在你的webpack配置文件中要求它。

這個配置是專門爲我的設置,我使用Postgres沒有PG本機。只要忽略你沒有使用的模塊。

webpack構建不需要兩個頂級插件,但他們擺脫了大量煩人的警告。他們可能有點危險,因爲他們可以匹配除knex之外的其他模塊中的需求。如果不編寫我自己的插件,我找不到更好的方法。

相關問題