我试图使用带有声明(d.ts)文件的rollup来打包一个d.ts库,并且我希望同时输出cjs和es版本。
所以我想出了一个rollup配置:
const {nodeResolve} = require('@rollup/plugin-node-resolve')
const nodeExternals = require('rollup-plugin-node-externals');
const json = require('@rollup/plugin-json');
const commonjs = require('@rollup/plugin-commonjs');
const typescript = require('rollup-plugin-typescript2');
const packagePlugin = require('@mpen/rollup-plugin-package');
const cleanPlugin = require('@mpen/rollup-plugin-clean');
const findUp = require('find-up');
const {readFileSync} = require('fs');
module.exports = function rollupPresetTslib(opts = {}) {
const tsconfigFile = findUp.sync(opts.tsconfig ?? 'tsconfig.json')
const tsconfig = JSON.parse(readFileSync(tsconfigFile))
return {
input: tsconfig.files,
plugins: [
commonjs({
include: 'node_modules/**',
}),
nodeExternals({
builtins: true,
deps: true,
devDeps: false,
peerDeps: true,
optDeps: false,
}),
json(),
typescript({
abortOnError: process.env.NODE_ENV === 'production',
tsconfig: tsconfigFile,
...opts.typescriptOptions,
}),
nodeResolve({
extensions: ['.ts', '.json']
}),
packagePlugin(),
cleanPlugin(),
...opts.plugins ?? [],
],
watch: {
buildDelay: 200,
...opts.watch,
},
preserveSymlinks: true, // https://www.npmjs.com/package/@rollup/plugin-commonjs#usage-with-symlinks
preserveModules: false, // outputs multiple files
output: {
dir: 'dist',
format: 'cjs',
sourcemap: true,
inlineDynamicImports: false,
},
}
}这产生了相当好的输出,但只编译为cjs:

因此,我尝试通过这样的修改output来输出这两种格式:
output: ['cjs', 'es'].map(format => ({
dir: `dist/${format}`,
format: format,
sourcemap: true,
inlineDynamicImports: false,
})),但是现在我得到了两个我不想要的.d.ts文件副本:

那么,如何获得d.ts文件的一个副本以及一个cjs和es构建?
发布于 2022-02-02 15:23:47
我已经将rollup配置为向dist/index.d.ts发出单个文件,并使用declarations.d.ts脚本将declarations.d.ts的内容附加到其中:
cat declarations.d.ts >> dist/index.d.ts这是我的rollup.config.js的内容
import commonjs from '@rollup/plugin-commonjs';
import clear from 'rollup-plugin-clear';
import ts from 'rollup-plugin-ts';
import styles from 'rollup-plugin-styles';
import image from '@rollup/plugin-image';
import { builtinModules } from 'module';
import pkg from './package.json';
module.exports = {
input: pkg.source,
output: [
{ file: pkg.main, format: 'cjs', sourcemap: true },
{ file: pkg.module, format: 'esm', sourcemap: true }
],
external: [
...builtinModules,
...(pkg.dependencies ? Object.keys(pkg.dependencies) : []),
...(pkg.devDependencies ? Object.keys(pkg.devDependencies) : []),
...(pkg.peerDependencies ? Object.keys(pkg.peerDependencies) : [])
],
watch: {
include: 'lib/**'
},
plugins: [
clear({
targets: ['dist'],
watch: false
}),
ts({
hook: {
// Always rename declaration files to index.d.ts to avoid emitting two declaration files with identical contents
outputPath: (path, kind) =>
kind === 'declaration' ? './dist/index.d.ts' : path
}
}),
image(),
styles({
modules: true,
autoModules: /\.module\.\S+$/
}),
commonjs()
]
};我希望这能帮助任何寻求解决方案的人。
https://stackoverflow.com/questions/66216414
复制相似问题