[
https://issues.apache.org/jira/browse/AVRO-3322?focusedWorklogId=716177&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-716177
]
ASF GitHub Bot logged work on AVRO-3322:
----------------------------------------
Author: ASF GitHub Bot
Created on: 27/Jan/22 03:42
Start Date: 27/Jan/22 03:42
Worklog Time Spent: 10m
Work Description: ruleeeer commented on pull request #1473:
URL: https://github.com/apache/avro/pull/1473#issuecomment-1022818568
@martin-g
When upgrading from webpack4 to webpack5, the `Buffer is not defined` issue
will definitely occur when using Avro-browser, because webpack4 has
`browserify` built in, which will automatically convert it for you, but
webpack5 has to declare `browserify` manually, like Configure it like this
``` javascript
resolve: {
fallback: {
'buffer':require.resolve('buffer')
}
}
```
But that's not enough, you'll still run into the `Buffer is not defined`
problem and you'll need to add a little configuration after searching
stackoverflow or searching the webpack documentation
``` javascript
plugins: [
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
}),
],
```
This is where you'll find Avro working properly,But this is only `webapck`,
there are also projects that use `rollup` or `vite` etc. to complete the
application bundle, which will cause everyone using avro-browser to have to
search for how to configure to solve the `Buffer is not defined` problem, also,
in the official Nodejs documentation it is pointed out that although Buffer
hangs globally, but a display declaration is a better approach.You can find it
here https://nodejs.org/api/buffer.html#buffer,
<img width="1517" alt="image"
src="https://user-images.githubusercontent.com/70385062/151286555-12d37205-92c4-4c79-95d3-289151911476.png">
It only takes two lines to fix the above problem, doesn't it?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 716177)
Time Spent: 2h 10m (was: 2h)
> Buffer is not defined in browser environment
> --------------------------------------------
>
> Key: AVRO-3322
> URL: https://issues.apache.org/jira/browse/AVRO-3322
> Project: Apache Avro
> Issue Type: Bug
> Components: js
> Environment: Firefox 96 & Brave 1.34(based on chromium)
> Reporter: ruleeeer
> Priority: Blocker
> Labels: pull-request-available
> Attachments: image-2022-01-25-15-57-43-468.png
>
> Time Spent: 2h 10m
> Remaining Estimate: 0h
>
> When I use avro in my browser, I find that I get the `Buffer is undefined
> error`
> !image-2022-01-25-15-57-43-468.png!
> The code I use is simple, it comes from the github repository readme.md
> {code:javascript}
> var avro = require('avro-js');
> var type = avro.parse({
> name: 'Pet',
> type: 'record',
> fields: [
> {name: 'kind', type: {name: 'Kind', type: 'enum', symbols: ['CAT',
> 'DOG']}},
> {name: 'name', type: 'string'}
> ]
> });
> var pet = {kind: 'CAT', name: 'Albert'};
> var buf = type.toBuffer(pet); // Serialized object.
> var obj = type.fromBuffer(buf); // {kind: 'CAT', name: 'Albert'}
> {code}
> Later I traced the source code and found that Buffer is used directly in
> `/etc/browser/avro.js` and `/lib/schema.js`, which is not a problem in the
> node environment because the Buffer object is mounted globally, but it is a
> problem in the browser environment because using buffer polyfill will not
> mount the Buffer object globally, You need to declare `var Buffer =
> require('buffer').Buffer` manually, so that it can be used in the browser
> environment without affecting the node environment, which also gets its
> Buffer from require('buffer').
--
This message was sent by Atlassian Jira
(v8.20.1#820001)