[ 
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 (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

 

  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.

 

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 (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
>  



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

Reply via email to