将库与外部化依赖和Vite捆绑在一起?

问题描述 投票:0回答:1

我正在尝试将一个使用

type: "module"
的库发布到 npm。我使用的是 vite 的库模式,配置如下:

export default defineConfig({
  css: {
    postcss: {
      plugins: [tailwindcss, autoprefixer, tailwindcss] as any,
    },
  },
  build: {
    lib: {
      entry: resolve(__dirname, "src/index.ts"),
      name: "lib_name",
      fileName: "lib_name",
    },
    rollupOptions: {
      output: [
        {
          dir: "dist/browser",
          name: "global_name",
          format: "iife",
          plugins: [],
        },
        {
          dir: "dist/esm",
          format: "esm",
          entryFileNames: "index.js",
          sourcemap: true,
        },
      ],
      external: ["@uppy/core"],
    },
  },
  plugins: [dts({ rollupTypes: true })] as any,
});

理想情况下,我什至不想捆绑到一个大文件中(但这是一个不同的主题 -

preserveModules
不是这里的解决方案)。

我的理解是,由于我的

dependencies
已在
package.json
中明确说明,我不需要捆绑它们。然而,默认情况下,vite 捆绑所有内容,并且生成的
.esm.js
文件不包含
import
语句。

虽然这没什么大不了的,但似乎效率很低。消费者无论如何都需要安装所有依赖项 - 为什么代码有两次?

如何更改配置以便导入外部依赖项而不是捆绑外部依赖项?

我尝试过的事情

  • 使用
    external
    卷展选项作为函数
    external: (id: string) => { return /^node_modules/.test(id)}
    以及值 `["@uppy/core"]
javascript typescript npm vite rollupjs
1个回答
0
投票

这对我有用

    rollupOptions: {
      external: (id) => !(path.isAbsolute(id) || id.startsWith(".")),
© www.soinside.com 2019 - 2024. All rights reserved.