node-postgres的webpack导入错误(' pg' .Client)

时间:2017-01-07 14:53:53

标签: node.js postgresql webpack babeljs node-postgres

尝试将以下文件与Webpack捆绑在一起失败

  错误在./~/pg/lib/native/index.js找不到模块:错误:无法   解决模块' pg-native'在   ... / node_modules / PG / lib目录/本地   @ ./~/pg/lib/native/index.js 9:13-33

我在 .babelrc 中尝试了几个ignore语句,但没有让它运行...

我要捆绑的测试文件: handler.js

const Client = require('pg').Client;

console.log("done");

webpack.config.js

module.exports = {
  entry: './handler.js',
  target: 'node',
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['babel'],
      include: __dirname,
      exclude: /node_modules/,
    }]
  }
};

.babelrc

{
  "plugins": ["transform-runtime"],
  "presets": ["es2015", "stage-1"]
}

的package.json

"dependencies": {
  "postgraphql": "^2.4.0",
  "babel-runtime": "6.11.6"
},
"devDependencies": {
  "babel-core": "^6.13.2",
  "babel-loader": "^6.2.4",
  "babel-plugin-transform-runtime": "^6.12.0",
  "babel-preset-es2015": "^6.13.2",
  "babel-preset-stage-0": "^6.5.0",
  "babel-polyfill": "6.13.0",
  "serverless-webpack": "^1.0.0-rc.3",
  "webpack": "^1.13.1"
}

有点相关的github问题:

4 个答案:

答案 0 :(得分:4)

这确实是一个旧线程,但是仍然帮助了我。 Steve Schafer 1提供的解决方案很好,但不是最简单的。

相反,由MarcoLüthy2在链接的问题中提供的文件可能是最容易设置的,因为它是纯配置,甚至不需要创建虚拟文件。

它包括如下修改Webpack配置plugins数组:

const webpack = require('webpack');

const webpackConfig = {
  ...
  resolve: { ... },
  plugins: [
    new webpack.IgnorePlugin(/^pg-native$/)
  ],
  output: { ... },
  ...
}

答案 1 :(得分:3)

这是一个旧线程,但问题仍然存在,因此对于任何遇到此问题的人,都有解决方法。问题是/professionals?categories.slug=foo /professionals?categories.name=foo /professionals?categories._id=(a id) 的编写方式与node-postgres的代码重写方式之间存在相互作用,即使没有显式导入/要求,也迫使babel加载。 / p>

最简单的解决方法是在您的pg-native中添加几个别名,以使其链接到虚拟空文件中:

webpack.config.js

其中虚拟文件包含一行:

{
  ...
  resolve: {
    alias: {
      ...
      'pg-native': path-to-dummy-js-file,
      'dns': path-to-dummy-js-file
    }
  }
  ...
}

有关进一步的讨论和替代解决方法,请参见https://github.com/brianc/node-postgres/issues/838

答案 2 :(得分:0)

你必须安装pg-native

npm install pg-native

答案 3 :(得分:0)

您可能在本地全局安装了pg-native。因此,数据包管理器在锁定文件中不包含pg-native。这是我在本地运行良好时遇到的一个问题,但是每次我在云Webpack中构建时,都会抱怨缺少pg-native。我通过删除推送到云中的文件中的锁文件(在本例中为seed.run)解决了该问题。