developit / developit/microbundle

Export maps and node support

オープン
#795 コメント 5 件 リアクション 3 件 担当者 0 名 GitHub で見る
主要言語
JavaScript
スター
8.1k
フォーク
358
PR マージ指標
30日以内にマージされた PR はありません

説明

Hello there 👋,

I recently switched to microbundle for a bunch of my libs and I love it so far, however, I ran into an issue where the modern bundle (via `exports`) doesn't seem to run inside node.js.

My (simplified) package.json looks like this:

```json
{
"name": "color2k",
"sideEffects": false,
"exports": "./dist/index.modern.js",
"main": "./dist/index.js",
"unpkg": "./dist/index.umd.js",
"module": "./dist/index.module.js",
"source": "./src/index.ts",
"types": "./dist/index.d.ts",
"scripts": {
"build": "microbundle"
}
}
```

And after I run `microbundle`, my dist folder looks like this

```
index.d.ts
index.js
index.js.map
index.modern.js
index.modern.js.map
index.module.js
index.module.js.map
index.umd.js
index.umd.js.map
```

And after I publish with this config and run the following code with Node.js, I get the following error:

```js
// my-file.js
const color2k = require('color2k');

// ...

```

```
SyntaxError: Unexpected token 'export'
at wrapSafe (internal/modules/cjs/loader.js:979:16)
at Module._compile (internal/modules/cjs/loader.js:1027:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
```

---

I suspect this is due to Node.js not knowing what to do with exports. For more context, I'm _not_ using the `mjs` extension when running this code in node LTS v14.15.3.

Maybe this is more of a question rather than a bug but in general: **How do I use exports with microbundle? How can I author a package that is both for Node.js and browsers?**

- Do I need to write a [conditional exports map](https://nodejs.org/api/packages.html#packages_conditional_exports)?
- Do I need to post-fix the modern bundle with the `.mjs` extension? If so how do I do that with microbundle?

Thanks for any support!

For now, I'll just remove the `exports` field.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。