developit / developit/microbundle

Export maps and node support

未关闭
#795 5 条评论 3 个 reaction 已指派 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.

贡献指南

这个仓库没有索引到贡献指南

调研方向

Start with the package.json exports and main fields and the generated dist/index.modern.js and dist/index.js; reproduce require('color2k') under Node.js v14.15.3. Compare the package's exports resolution with Node's conditional exports documentation. Done means the published package configuration or output loads through require() while preserving the browser entry points.

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript, node.js
领域
build-system
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
需要澄清
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。