ncc fails with package etcd3
ncc does not work with etcd3 package: https://www.npmjs.com/package/etcd3
Repro and error messages as follows:
- yarn init -y
- yarn add etcd3
- file index.js
const { Etcd3 } = require('etcd3')
-
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)
- clear dist folder
- file index.mjs
import { Etcd3 } from 'etcd3'
-
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
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.
Same issue Any possible solution?