Я пишу библиотеку Bluetooth для Node.js , используя TypeScript и Rollup. Я хочу, чтобы пользователи могли импортировать компоненты моих библиотек следующими способами:
import Sblendid from "@sblendid/sblendid";
import Sblendid, { Peripheral } from "@sblendid/sblendid";
const Sblendid = require("@sblendid/sblendid");
const { Peripheral } = require("@sblendid/sblendid");
Структура моего проекта выглядит следующим образом:
root
∟ rollup.config.ts
∟ src
∟ index.ts
∟ sblendid.ts
∟ peripheral.ts
И соответствующий код такой:
index.ts
export {
default,
} from "./sblendid";
export {
default as Peripheral,
} from "./peripheral";
sblendid.ts
export default class Sblendid {}
peripheral.ts
export default class Peripheral {}
Я связываю все с Rollup, и весь мой конфиг такой:
import typescript from "typescript";
import commonjs from "rollup-plugin-commonjs";
import resolve from "rollup-plugin-node-resolve";
import typescriptPlugin from "rollup-plugin-typescript2";
import autoExternal from "rollup-plugin-auto-external";
import { terser } from "rollup-plugin-terser";
import pkg from "./package.json";
export default {
input: "src/index.ts",
output: [
{
file: pkg.main,
format: "cjs",
sourcemap: true
},
{
file: pkg.module,
format: "es",
sourcemap: true
}
],
plugins: [
autoExternal(),
resolve({ preferBuiltins: true }),
commonjs(),
typescriptPlugin({ typescript, objectHashIgnoreUnknownHack: true }),
terser()
]
};
Вы можете найти весь код здесь
https://github.com/LukasBombach/sblendid/tree/master/packages/sblendid
Сейчасэта настройка не работает. Свертыш говорит мне
$ rollup -c rollup.config.ts
src/index.ts → dist/index.cjs.js, dist/index.es.js...
(!) Mixing named and default exports
Consumers of your bundle will have to use bundle['default'] to access the default export, which may not be what you want. Use `output.exports: 'named'` to disable this warning
что верно. Это
const Sblendid = require("@sblendid/sblendid");
просто не работает. Что мне нужно сделать, это:
const Sblendid = require("@sblendid/sblendid").default;
Я могу исправить это поведение с помощью не смешивая экспорт имен по умолчанию, хорошо, но тогда я теряю способностьсделать это:
import Sblendid, { Peripheral } from "@sblendid/sblendid";
Так что мне интересно. Есть ли любой способ, возможно, с использованием нескольких комплектов, я могу добиться того, чтобы пользователи могли выполнять оба:
// This
import Sblendid from "@sblendid/sblendid";
import Sblendid, { Peripheral } from "@sblendid/sblendid";
// And this
const Sblendid = require("@sblendid/sblendid");
const { Peripheral } = require("@sblendid/sblendid");