【问题标题】:Pg-native failing on webpackpg-native 在 webpack 上失败
【发布时间】:2021-04-02 18:42:57
【问题描述】:

我的无服务器项目有问题。

这是我的 webpack 配置:

// webpack.config.js
const path = require('path');
const webpack = require('webpack');

module.exports = {
  target: 'node',
  plugins: [
    new webpack.IgnorePlugin({ resourceRegExp: /^pg-native$/})
  ],
  module: {
    rules: [
      {
        loader: 'ts-loader',
        options: {
        transpileOnly: true
        },
      }
    ]
  },
  resolve: {
    extensions: ['.ts', '.js', '.tsx', '.jsx']
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: 'handler.js'
  },
  mode: 'development'
};

还有我的 serverless.yml:

provider:
  name: aws
  region: "eu-west-1"
  stage: dev
  timeout: 10

custom:
  webpack:
    webpackConfig: webpack.config.js
    includeModules: false # this is telling webpack to reference all dependencies (non-dev dependencies) in node_modules and serverless would upload the package.json with the node_modules folder
    # forceExclude:
    #    - pg-native
package:
    individually: true

plugins:
  - serverless-webpack
  - serverless-plugin-typescript
  - serverless-offline

还有 package.json:

"dependencies": {
    "@babel/types": "^7.12.12",
    "@types/aws-lambda": "^8.10.61",
    "@types/bcrypt": "^3.0.0",
    "@types/bcryptjs": "^2.4.2",
    "@types/gapi": "0.0.39",
    "@types/pg": "^7.14.7",
    "@types/uuid": "^8.3.0",
    "axios": "^0.21.0",
    "bcryptjs": "^2.4.3",
    "googleapis": "^66.0.0",
    "pg": "^8.5.1",
    "query-string": "^6.13.7",
    "serverless": "^1.78.1",
    "serverless-offline": "^6.5.0",
    "serverless-plugin-typescript": "^1.1.9",
    "typescript": "^3.9.7"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@babel/preset-env": "^7.12.7",
    "@types/jest": "^26.0.16",
    "babel-jest": "^26.6.3",
    "copy-webpack-plugin": "^7.0.0",
    "jest": "^26.6.3",
    "serverless-webpack": "^5.3.5",
    "ts-jest": "^26.4.4",
    "ts-loader": "^8.0.12",
    "webpack": "^5.11.0",
    "webpack-node-externals": "^2.5.2"
  }

我无法删除的错误是:

PS C:\Users\sg\Desktop\CODE\sc-server> serverless deploy
Serverless: Running "serverless" installed locally (in service node_modules)
Serverless: Configuration warning at root: unrecognized property 'name'
Serverless:
Serverless: Learn more about configuration validation here: http://slss.io/configuration-validation
Serverless:
Serverless: Bundling with Webpack...
asset handler.js 340 KiB [emitted] (name: handler)
modules by path ./node_modules/ 279 KiB 56 modules
19 modules

ERROR in ./node_modules/pg/package.json
Module build failed (from ./node_modules/ts-loader/index.js):
Error: Debug Failure. Output generation failed
    at Object.transpileModule (C:\Users\sg\Desktop\CODE\sc-server\node_modules\typescript\lib\typescript.js:123670:29)
    at getTranspilationEmit (C:\Users\sg\Desktop\CODE\sc-server\node_modules\ts-loader\dist\index.js:390:75)
    at successLoader (C:\Users\sg\Desktop\CODE\sc-server\node_modules\ts-loader\dist\index.js:38:11)
    at Object.loader (C:\Users\sg\Desktop\CODE\sc-server\node_modules\ts-loader\dist\index.js:23:5)
 @ ./node_modules/pg/lib/native/client.js 5:10-39
 @ ./node_modules/pg/lib/native/index.js 2:0-36
 @ ./node_modules/pg/lib/index.js 23:28-47 34:32-51
 @ ./initialization/Database.ts 4:13-26
 @ ./handler.ts 4:19-55

webpack compiled with 1 error in 89280 ms
 
  Error --------------------------------------------------

  Error: Webpack compilation error, see above
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\serverless-webpack\lib\compile.js:36:17
      at arrayEach (C:\Users\sg\Desktop\CODE\sc-server\node_modules\lodash\lodash.js:516:11)
      at Function.forEach (C:\Users\sg\Desktop\CODE\sc-server\node_modules\lodash\lodash.js:9368:14)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\serverless-webpack\lib\compile.js:29:9
      at tryCatcher (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\util.js:16:23)
      at Promise._settlePromiseFromHandler (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\promise.js:547:31)
      at Promise._settlePromise (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\promise.js:604:18)
      at Promise._settlePromise0 (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\promise.js:649:10)
      at Promise._settlePromises (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\promise.js:729:18)
      at Promise._fulfill (C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\promise.js:673:18)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\bluebird\js\release\nodeback.js:42:21
      at finalCallback (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\MultiCompiler.js:375:12)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\MultiCompiler.js:398:6
      at done (C:\Users\sg\Desktop\CODE\sc-server\node_modules\neo-async\async.js:2931:13)
      at runCompilers (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\MultiCompiler.js:285:48)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\MultiCompiler.js:292:7
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\MultiCompiler.js:391:7
      at finalCallback (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:388:32)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:452:17
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\HookWebpackError.js:69:3
      at Hook.eval [as callAsync] (eval at create (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)        
      at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\Hook.js:18:14)
      at Cache.storeBuildDependencies (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Cache.js:122:37)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:448:19
      at Hook.eval [as callAsync] (eval at create (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:15:1)       
      at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\Hook.js:18:14)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:445:23
      at Compiler.emitRecords (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:820:39)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:437:11
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:802:14
      at Hook.eval [as callAsync] (eval at create (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)        
      at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\Hook.js:18:14)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:799:27
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\neo-async\async.js:2818:7
      at done (C:\Users\sg\Desktop\CODE\sc-server\node_modules\neo-async\async.js:3522:9)
      at Hook.eval [as callAsync] (eval at create (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:6:1)        
      at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\node_modules\tapable\lib\Hook.js:18:14)
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\webpack\lib\Compiler.js:667:33
      at C:\Users\sg\Desktop\CODE\sc-server\node_modules\graceful-fs\graceful-fs.js:144:16
      at C:\Users\sg\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:144:16
      at C:\Users\sg\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:61:14
      at FSReqCallback.oncomplete (fs.js:146:23)
 
     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com

  Your Environment Information ---------------------------
     Operating System:          win32
     Node Version:              12.14.1
     Framework Version:         2.13.0 (local)
     Plugin Version:            4.1.2
     SDK Version:               2.3.2
     Components Version:        3.4.2

这里有人有什么建议吗?我尝试添加别名,我尝试使用排除包(目前在webpack.config),但无济于事。

【问题讨论】:

  • 你知道pg-native 是一个C++ 模块吗?你正在为客户端构建它? :)
  • 我想我通过解决这个问题并将export default null 放入模块中。除此之外,我认为我会将其作为外部模块,因为这似乎是问题所在。
  • @Peter 我遇到了同样的问题。你在哪里添加export default null

标签: javascript webpack serverless-framework


【解决方案1】:

关于pg-native 是 C++ 的问题的评论错过了关键点:pg 模块在浏览器和节点上都可以工作,但是 Webpack 感到困惑并试图打包原生模块。

简单的解决方案是在 Webpack 配置中排除 pg-native。这很好用。

一个问题是当我将 Webpack 从 4 升级到 5 时,我之前的工作设置坏了。

这对我有用:

Webpack 5:

new webpack.IgnorePlugin({ resourceRegExp: /^pg-native$/}),

Webpack 4:

new webpack.IgnorePlugin(/^pg-native$/),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多