我已经有很长一段时间了,使用Typescript创建和使用NPM包很方便,但这些包基本上是作为单个模块提供和使用的。我现在想要发布包含多个模块的软件包,而不需要消费者在他们的代码中导入比他们想要的更多的软件包。
假设我的包src文件夹中有两个打字稿模块,一个位于文件one.ts中,另一个位于文件two.ts中:
one.ts:
export function talk() { console.log("Hello World"); };
two.ts:
export function talk() { console.log("Goodbye World"); };
现在,使用在Typescript中创建NPM包的最佳实践,我还在我的src文件夹中创建了index.ts文件:
index.ts:
import * as one from "./one";
import * as two from "./two";
export { one, two };
在我的包的dist文件夹中将如何存在文件index.js,index.d.ts,one.js,one.d.ts,two.js和two.d.ts(并且可能还有与此问题无关的源映射文件。)
这是(略有缩写)package.json:
{
"name": "my-package",
"version": "0.0.5",
"description": "",
"license": "UNLICENSED",
"main": "dist/",
"types": "dist/",
"scripts": {
"build": "tsc --skipLibCheck",
"prepublish": "yarn run build",
},
"keywords": [],
"dependencies": {},
"files": [
"src",
"dist"
]
}
同样有点缩写的tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "es6",
"moduleResolution": "node",
"noImplicitAny": true,
"noEmitOnError": true,
"removeComments": false,
"declaration": true,
"outDir": "./dist",
"allowJs": false,
"sourceMap": true,
"typeRoots": [
"./node_modules/@types"
]
},
"include": [ "src/**/*" ],
"exclude": [ "node_modules" ],
"compileOnSave": false
}
现在我发布该包并使用以下内容在typescript中使用它(当然,在npm -i之后):
import * as conversation from "my-package"
conversation.one.talk(); // Hello World
conversation.two.talk(); // Goodbye World
但现在假设我只想导入模块one.ts.我只会说"你好",而不是"再见"。 重要提示:我甚至不想要"再见"打包到我的消费代码中。(在我的情况下,我使用webpack捆绑消费代码)。
所以我想以某种方式能够要求导入只能导入one.ts.我不太关心语法是什么样的,只要我能做到这一点:
import * as greeting from "my-package.one"; // I know this doesn't work
greeting.talk();
我也非常希望能够做到这一点:
import { talk } from "my-package.one"; // Again, I know this doesn't work
talk();
我知道如何编写javascript并使用环境模块创建自己的头文件。但我不想做任何像这样的事情。我只想使用模块中的模块作为节点模块中安装的软件包。
任何可能暗示修改我如何构建多模式包和/或我如何使用它的指针?
非常感谢。
答案 0 :(得分:1)
你可以这样做:
.fixed-header {
position: fixed;
top: 0;
left: 0;
z-index: 2;
width: 100% !important;
}
.footer {
position: fixed;
left: 0;
bottom: 0;
width: 100%;
color: white;
text-align: center;
}