ncc icon indicating copy to clipboard operation
ncc copied to clipboard

ncc fails with package etcd3

Open jeffrson opened this issue 3 years ago • 2 comments

ncc does not work with etcd3 package: https://www.npmjs.com/package/etcd3

Repro and error messages as follows:

  1. yarn init -y
  2. yarn add etcd3
  3. file index.js
const { Etcd3 } = require('etcd3')
  1. ncc build .\index.js -s -C
> node dist/index.js

C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\namespace.js:411
        throw Error("no such Type or Enum '" + path + "' in " + this);
^
Error: no such Type or Enum 'mvccpb.KeyValue' in Type .etcdserverpb.RangeResponse
    at Type.lookupTypeOrEnum (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\namespace.js:411:1)
    at Field.resolve (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\field.js:268:1)
    at Type.set (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\type.js:177:1)
    at Type.get (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\type.js:155:1)
    at Field.resolve (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\field.js:317:1)
    at Type.resolveAll (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\type.js:304:1)
    at Namespace.resolveAll (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\namespace.js:308:1)
    at Root.resolveAll (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\namespace.js:308:1)
    at Root.resolveAll (C:\temp\etcd_test\webpack:\etcd_test\node_modules\protobufjs\src\root.js:258:1)
    at Object.loadSync (C:\temp\etcd_test\webpack:\etcd_test\node_modules\@grpc\proto-loader\build\src\index.js:224:1)
  1. clear dist folder
  2. file index.mjs
import { Etcd3 } from 'etcd3'
  1. ncc build .\index.mjs -s -C --target es2020
> node dist/index.mjs

file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/protobufjs/src/root.js:172
                source = util.fs.readFileSync(filename).toString("utf8");
^
TypeError: Cannot read properties of null (reading 'readFileSync')
    at fetch (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/protobufjs/src/root.js:172:1)
    at Root.load (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/protobufjs/src/root.js:206:1)
    at Root.loadSync (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/protobufjs/src/root.js:247:1)
    at Object.loadSync (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/@grpc/proto-loader/build/src/index.js:223:1)
    at Object.8483 (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/etcd3/lib/connection-pool.js:12:1)
    at __nccwpck_require__ (file:///C:/temp/etcd_test/webpack:/etcd_test/webpack/bootstrap:21:1)
    at Object.7012 (file:///C:/temp/etcd_test/webpack:/etcd_test/node_modules/etcd3/lib/index.js:18:1)
    at __nccwpck_require__ (file:///C:/temp/etcd_test/webpack:/etcd_test/webpack/bootstrap:21:1)
    at file:///C:/temp/etcd_test/dist/index.mjs:30413:63
    at file:///C:/temp/etcd_test/dist/index.mjs:30416:3

ncc 0.33.3

jeffrson avatar Mar 29 '22 06:03 jeffrson

Thanks for the repro steps!

This code is quite dynamic since the protobuf file path is never passed directly to a fs.readFile(), and instead is passed to loadSync()

https://github.com/protobufjs/protobuf.js/blob/95b56817ef6fb9bdcb14d956c159da49d0889bff/src/root.js#L244

https://github.com/protobufjs/protobuf.js/blob/95b56817ef6fb9bdcb14d956c159da49d0889bff/src/root.js#L85

Theres probably not much we can statically analyze here so you'll have to manually include the protobuff files or we'll need to add a special case to ncc to handle this package.

styfle avatar Apr 01 '22 21:04 styfle

Same issue Any possible solution?

EvilaMany avatar Mar 01 '24 11:03 EvilaMany