[ 
https://issues.apache.org/jira/browse/ARROW-12636?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Howard Zuo updated ARROW-12636:
-------------------------------
    Description: 
When a JS application depends on `apache-arrow` or any of the ESM variants, 
Arrow's package.json declares `sideEffects: false` which allows bundlers like 
Webpack or Rollup to remove all code that's evaluated at the top level of all 
modules (any code that isn't explicitly imported can be pruned).

 

However, there are important top-level side effects that arrow relies on, e.g. 
for binding methods on types:

[https://github.com/apache/arrow/blob/c0445d69088a6fbd9c026ecac6a99c6cd4df4865/js/src/vector/index.ts#L167-L179]

 

So currently, any JS app that uses tree-shaking and depends on `apache-arrow` 
or the ESM variants will throw if any of those methods are called, e.g. in my 
case I see `TypeError: e._chunks[t].get is not a function` when calling 
`table.get`.

 

Indeed switching to the CJS variants like `@apache-arrow/es2015-cjs` fixes the 
issue, since the Arrow build does not inject `sideEffects: false` into its 
package.json for non-ESM variants.

 

For reference, the `sideEffects: false` logic was introduced in this PR and 
issue:

[https://github.com/apache/arrow/pull/8418/]

https://issues.apache.org/jira/browse/ARROW-10255

 

  was:
When a JS application depends on `apache-arrow` or any of the ESM variants, 
Arrow's package.json declares `sideEffects: false` which allows bundlers like 
Webpack or Rollup to remove all code that's evaluated at the top level of all 
modules (tree shaking ~= any code that isn't explicitly imported can be pruned).

 

However, there are important top-level side effects that arrow relies on, e.g. 
for binding methods on types:

[https://github.com/apache/arrow/blob/c0445d69088a6fbd9c026ecac6a99c6cd4df4865/js/src/vector/index.ts#L167-L179]

 

So currently, any JS app that uses tree-shaking and depends on `apache-arrow` 
or the ESM variants will throw if any of those methods are called, e.g. in my 
case I see `TypeError: e._chunks[t].get is not a function` when calling 
`table.get`.

 

Indeed switching to the CJS variants like `@apache-arrow/es2015-cjs` fixes the 
issue, since the Arrow build does not inject `sideEffects: false` into its 
package.json for non-ESM variants.

 

For reference, the `sideEffects: false` logic was introduced in this PR and 
issue:

[https://github.com/apache/arrow/pull/8418/]

https://issues.apache.org/jira/browse/ARROW-10255

 


> [JS] ESM Tree-Shaking produces broken code
> ------------------------------------------
>
>                 Key: ARROW-12636
>                 URL: https://issues.apache.org/jira/browse/ARROW-12636
>             Project: Apache Arrow
>          Issue Type: Bug
>          Components: JavaScript
>    Affects Versions: 4.0.0
>            Reporter: Howard Zuo
>            Priority: Major
>
> When a JS application depends on `apache-arrow` or any of the ESM variants, 
> Arrow's package.json declares `sideEffects: false` which allows bundlers like 
> Webpack or Rollup to remove all code that's evaluated at the top level of all 
> modules (any code that isn't explicitly imported can be pruned).
>  
> However, there are important top-level side effects that arrow relies on, 
> e.g. for binding methods on types:
> [https://github.com/apache/arrow/blob/c0445d69088a6fbd9c026ecac6a99c6cd4df4865/js/src/vector/index.ts#L167-L179]
>  
> So currently, any JS app that uses tree-shaking and depends on `apache-arrow` 
> or the ESM variants will throw if any of those methods are called, e.g. in my 
> case I see `TypeError: e._chunks[t].get is not a function` when calling 
> `table.get`.
>  
> Indeed switching to the CJS variants like `@apache-arrow/es2015-cjs` fixes 
> the issue, since the Arrow build does not inject `sideEffects: false` into 
> its package.json for non-ESM variants.
>  
> For reference, the `sideEffects: false` logic was introduced in this PR and 
> issue:
> [https://github.com/apache/arrow/pull/8418/]
> https://issues.apache.org/jira/browse/ARROW-10255
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to