Node.js 如何导出自定义环境模块声明以供使用者使用?
我正在创建一个由辅助节点应用程序使用的组件库(都使用Typescript)。在这个组件库中,我们有许多环境模块来帮助键入/加载图片文件,例如:Node.js 如何导出自定义环境模块声明以供使用者使用?,node.js,typescript,module,Node.js,Typescript,Module,我正在创建一个由辅助节点应用程序使用的组件库(都使用Typescript)。在这个组件库中,我们有许多环境模块来帮助键入/加载图片文件,例如: declare module "*.png" { const content: string; export default content; } 以及从第三方库中扩展出的现有但不完整类型的其他类型。。。例如: import * as vc from "victory-core"; import * as
declare module "*.png" {
const content: string;
export default content;
}
以及从第三方库中扩展出的现有但不完整类型的其他类型。。。例如:
import * as vc from "victory-core";
import * as vl from "victory-label";
declare module "victory-core" {
export interface CallbackArgs extends vc.CallbackArgs {
index: number;
}
}
declare module "victory" {
export interface VictoryLabelProps extends vl.VictoryLabelProps {
stringTicks?: string[];
index?: number;
}
}
然后使用Rollup编译和构建此库,并由辅助应用程序使用。问题在于,消费者应用程序无法使用这些类型,即,如果某个组件试图将stringTicksarg作为VictoryLabelProps的一部分传入,它将不会被识别为有效的道具。
与.png模块类似,我无法在我的消费者应用程序中加载png文件,除非我复制并粘贴.d.ts
文件,并将其明确添加为我的消费者应用程序的一部分
下面是我的组件库的配置:
{
"compilerOptions": {
"declaration": true,
"declarationDir": "./dist",
"outDir": "./dist",
"rootDir": "./src",
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"baseUrl": ".",
"typeRoots": [
"src/types",
"node_modules/@types"
],
},
"exclude": ["node_modules", "dist"],
"include": ["src/**/*"],
}
(我尝试根据添加typeRoots和baseUrl)
和我的rollup.config:
{
input: "src/index.ts",
output: [
{
dir: "dist",
format: "cjs",
sourcemap: true,
},
],
external: ["fs"],
plugins: [
peerDepsExternal(),
commonjs({
include: "node_modules/**",
}),
resolve(),
babel({
exclude: "node_modules/**",
babelHelpers: "bundled",
extensions: [...DEFAULT_EXTENSIONS, ".ts", ".tsx"],
presets: [["@babel/preset-react", { runtime: "automatic" }]],
}),
typescript(),
json(),
image(),
url({
include: ["**/*.woff", "**/*.woff2"],
limit: Infinity,
}),
],
};
感谢您的帮助 您需要在库的
package.json
中包含types
字段。该字段应包含.d.ts
目录或文件的路径
{
"name": "awesome",
"author": "Vandelay Industries",
"version": "1.0.0",
"main": "./lib/main.js",
"types": "./lib/main.d.ts"
}
更多信息: