parcel-bundler / parcel

The zero configuration build tool for the web. πŸ“¦πŸš€
https://parceljs.org
MIT License
43.26k stars 2.26k forks source link

`date-fns@3.6.0` failures in `typescript` and `parcel` builds and runtime #9676

Open isakstarlander opened 2 months ago

isakstarlander commented 2 months ago

πŸ› bug report

After upgrading date-fns to version 3.6.0 the parcel build started failing, not finding the exported functions. Apart from that the runtime function calls in the dev server fails with provided errors documented in the reproduction repository.

This seems to be a problem for parcel builds in particular, a related issue in date-fns can be found here: https://github.com/date-fns/date-fns/issues/3744

πŸ€” Expected Behavior

Build should be successful and runtime function calls should work as described in the date-fns repository.

😯 Current Behavior

Build fails unless specifying the alias function name. Runtime the format function throws an error.

Build error:

@parcel/core: node_modules/date-fns/index.mjs does not export 'format'

  /Users/isakstarlander/git/date-fns-parcel-reproduction/formatImport.ts:17:10
    16 | 
  > 17 | import { format } from "date-fns";
  >    |          ^^^^^^
    18 | 
    19 | function renderFormattedDate() {

Runtime error:

TypeError: Cannot read properties of undefined (reading 'y')
    at format.mjs:378:21
    at Array.map (<anonymous>)
    at format (format.mjs:367:6)
    at renderFormattedDate (formatImport.ts:10:26)
    at ghM9m.date-fns (formatImport.ts:21:1)
    at newRequire (index.0dd3d9d0.js:71:24)
    at index.0dd3d9d0.js:122:5
    at index.0dd3d9d0.js:145:3

πŸ”¦ Context

This issue prevents us from upgrading date-fns to the latest supported major version.

πŸ’» Code Sample

Reproduction repository: https://github.com/Milkywire/date-fns-parcel-reproduction

🌍 Your Environment

Software Version(s)
Parcel 2.12.0
date-fns 3.6.0
Node 18
Operating System MacOS
Poky85 commented 1 month ago

In the meantime this is workaround:

import format from 'date-fns/format';