Yarn 不会 publish/add ESM 和 CJS 版本的包?

Yarn won't publish/add both ESM and CJS versions of package?

我们有一个与 Parcel 捆绑在一起的应用程序,它使用 UI 库(反应组件)。 UI 库与 Rollup 捆绑在一起,并作为私有包发布在 NPM 上。

我一直在尝试迁移我们的应用程序以使用 Parcel 2,但 Parcel 抱怨它无法在 dist 文件夹中找到 UI 库的 ESM 版本。果然,当我检查我的 node_modules 目录时,UI 库的 dist 文件夹只包含一个文件:index.cjs.js.

奇怪的是,UI 库设置为使用源映射以 CJS 和 ESM 格式构建。当我在本地构建项目时,Rollup 会生成 CJS 和 ESM 文件及其源映射:index.cjs.jsindex.cjs.js.mapindex.esm.jsindex.esm.js.map。因此,不知何故,似乎是:(1) Yarn 仅将库的 CJS 版本发布到 NPM 或 (2) 当 UI 库添加到应用程序时,仅构建 CJS 版本。这两种情况对我来说都没有意义。

这是我们 package.jsonrollup.config.js 文件的相关部分:

{
 "name": "@thecb/components",
  "version": "4.0.23",
  "description": "Common lib for CityBase react components",
  "main": "dist/index.cjs.js",
  "module": "dist/index.esm.js",
  "source": "src/index.js",
  "scripts": {
    "storybook": "start-storybook",
    "build": "rollup -cm"
  },
import resolve from "rollup-plugin-node-resolve";
import commonjs from "rollup-plugin-commonjs";
import babel from "rollup-plugin-babel";
import json from "rollup-plugin-json";
import visualizer from "rollup-plugin-visualizer";
import pkg from "./package.json";

import * as formattedInput from "formatted-input";

const globals = {
  react: "React",
  "react-dom": "ReactDOM"
};

const plugins = [
  resolve({ preferBuiltins: false }),
  babel({
    exclude: "node_modules/**",
    presets: ["@babel/env", "@babel/preset-react"]
  }),
  json(),
  commonjs({
    include: "node_modules/**",
    namedExports: {
      "formatted-input": Object.keys(formattedInput)
    }
  }),
  visualizer()
];

const external = [...Object.keys(pkg.peerDependencies || {})];

const output_data = [
  {
    file: pkg.main,
    format: "cjs"
  },
  {
    file: pkg.module,
    format: "esm"
  }
];

export default output_data.map(({ file, format }) => ({
  input: "src/index.js",
  output: {
    file,
    format,
    globals
  },
  plugins,
  external
}));

有人知道为什么不发布或安装此库的 ESM 版本吗?

回复晚了,但我 运行 今天遇到了非常相似的事情。不使用 rollup 而是直接使用 tsc 来输出 dist/cjs/*dist/esm/*.

我发现我的构建过程在本地生成了两个输出,但 yarn publish 生成的 tarball 只包含 dist/cjs/*。 TBH 我不确定为什么;我目前的理论是 yarn 以某种方式使用 "main": "dist/cjs/index.js" 并从中推断出包包含的一些默认值。

我可以告诉你的是,通过将 "files": "dist" 添加到我的 package.json 中,我让 yarn 自行运行并将 dist/cjs/*dist/esm/* 添加到包 tarball正如我最初预期的那样。

https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files