Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can this package be bundled with Webpack for a Node project? #1187

Closed
hassankhan opened this issue Dec 16, 2016 · 8 comments
Closed

Can this package be bundled with Webpack for a Node project? #1187

hassankhan opened this issue Dec 16, 2016 · 8 comments
Milestone

Comments

@hassankhan
Copy link

hassankhan commented Dec 16, 2016

Hi there,

I'm trying to build a Webpack bundle for an AWS Lambda project and I'm running into a few errors. I have a common package and a project package. The common package sets up a connection and returns a client from pg. The project package uses the client to actually execute queries. Currently I'm trying to bundle pg in the common package, but I've also tried setting it as an external with not much difference 😢 I've included the error I get when I try and build my project:

ERROR in ./~/server-libs/dist/bundle.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../type-overrides in /project/node_modules/server-libs/dist
 @ ./~/server-libs/dist/bundle.js 5:11534-11562

ERROR in ./~/server-libs/dist/bundle.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../../package.json in /project/node_modules/server-libs/dist
 @ ./~/server-libs/dist/bundle.js 5:11585-11614

ERROR in ./~/server-libs/dist/bundle.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../connection-parameters in /project/node_modules/server-libs/dist
 @ ./~/server-libs/dist/bundle.js 5:11688-11723

ERROR in ./~/server-libs/dist/bundle.js
Module not found: Error: Cannot resolve 'file' or 'directory' ./query in /project/node_modules/server-libs/dist
 @ ./~/server-libs/dist/bundle.js 5:11832-11850

ERROR in ./~/server-libs/dist/bundle.js
Module not found: Error: Cannot resolve module 'pg-native' in /project/node_modules/server-libs/dist
 @ ./~/server-libs/dist/bundle.js 5:11511-11531

Webpack configuration for common package:

const path = require('path');

const PATHS = {
  dist : path.resolve(__dirname, 'dist'),
  src  : path.resolve(__dirname, 'src'),
};

module.exports = {
  entry  : './index.js',
  target : 'node',
  output : {
    path          : PATHS.dist,
    filename      : 'bundle.js',
    library       : 'ServerLib',
    libraryTarget : 'umd',
  },
  resolve : {
    extensions : ['', '.js'],
    root       : [ PATHS.src ],
  },
  module : {
    loaders : [{
      test    : /\.js$/,
      loaders : ['babel'],
      exclude : /node_modules/,
    }, {
      test    : /\.json$/,
      loaders : ['json'],
    }],
    noParse : [/pg\/lib\/native/]
  },
  externals : {
    'lodash' : true,
    'moment' : true,
  },
};

Webpack configuration for project package:

module.exports = {
  entry  : './handler.js',
  target : 'node',
  module : {
    loaders : [{
      test    : /\.js$/,
      loaders : ['babel'],
      exclude : /node_modules/,
    }, {
      test    : /\.json$/,
      loaders : ['json'],
    }],
  },
};
@manueltimita
Copy link

This issue should be closed, since it's Webpack specific.

@hassankhan, you might want to have a look at the webpack specific issue here: serverless-heaven/serverless-webpack#78.

@brianc brianc closed this as completed May 24, 2017
@brianc
Copy link
Owner

brianc commented May 24, 2017

closing at the recommendation of @manueltimita - also I don't know, I have never bundled non-browser code with webpack.

@brianc
Copy link
Owner

brianc commented May 24, 2017

@hassankhan I'd be interested in any info you came up with, I can add it to the docs.

@brianc brianc added this to the docs milestone May 24, 2017
@hassankhan
Copy link
Author

Hi @brianc,

I ended up using Knex so I don't know if it's any help, but my Webpack plugins configuration looks like this:

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

@brianc
Copy link
Owner

brianc commented May 24, 2017

Thanks @hassankhan

@craiggoldstone
Copy link

craiggoldstone commented Jun 8, 2017

I've managed to successfully bundle this using pg@6.2.3 + pg-native@1.10.1 + typescript@2.3.4 + webpack@2.6.1 + awesome-typescript-loader@3.1.3 + @types/pg@6.1.41. Made a small repo to illustrate: https://github.com/craigsnyders/serverless-typescript-starter

I think the crucial parts are:

  • npm install pg-native (webpack wasn't including this in the output otherwise?!)
  • target: 'node' in webpack config

@jgrund
Copy link

jgrund commented Jun 17, 2017

FWIW, I got webpack to compile by adding the following to my webpack config (I don't need pg-native):

plugins: [new webpack.IgnorePlugin(/\.\/native/, /\/pg\//)]

This removes attempted resolution of './native' in https://github.com/brianc/node-postgres/blob/v6.2.3/lib/index.js#L95 and https://github.com/brianc/node-postgres/blob/v6.2.3/lib/index.js#L104.

@evbo
Copy link

evbo commented May 17, 2020

As pointed out by @hassankhan, same fix here
#838 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants