如何在开发过程中设置NPM Typescript软件包以维护导入语法?

时间:2020-11-02 00:39:03

标签: node.js reactjs typescript npm

我正在开发一个NPM打字稿包,以便从我的主应用程序中进行代码分割。

两个项目共享一个根目录,即:

- mylib
  - package.json
  - tsconfig.json
  - src/
  - dist/
- myapp
  - package.json
  - tsconfig.json
  - src/

如果myapp/package.json尝试将mylib链接为file:../mylib,则npm install成功...但是我成功导入的唯一方法是使用... from mylib/src/ (否则,tsc编译器无法识别该路径)。但是,此导入语法与软件包的正式版(不包含src)不同。

另外,我还需要针对第二个未启用 打字稿的应用开发mylib。在这种情况下,将src包括在导入路径中将不起作用,因为当CI创建应用程序时,该路径将无法针对已发布的NPM包进行解析。

我遇到了one solution,它在技术上是有效的:

cd mylib
cp package.json dist/
cd dist
npm link

cd ../../myapp
npm link mylib

因此,npm link已创建到dist文件夹中。但这需要复制package.json,否则链接仅转到mylib而不是mylib/dist

不幸的是,这很快就崩溃了,因为我的mylib/package.json具有相对的导入路径:

"react": "file:../myapp/node_modules/react",

哪个are necessary in order to preserve only one instance of the React package。将package.json复制到dist/文件夹中以创建链接会导致这些导入无法解析。使用绝对路径对我项目中的其他开发人员不起作用。此外,将package.json复制到dist/似乎是一种反模式。

编辑1

我尝试根据评论切换到yarn。在这方面,它表现出与NPM完全相同的行为。即,yarn link命令始终指向带有package.json的文件夹。再次,这迫使我在导入中使用src/文件夹,这在指向生产NPM软件包的生产版本中将不起作用。

1 个答案:

答案 0 :(得分:0)

首先,工作区不需要链接 解决您问题的简单方法

29.1666666667
// packages/project-a/index.ts
// for development
export * from src/index.ts;

在您的模块中创建index.js,index.ts, 当使用ts-node运行您的项目时,程序会自动加载index.ts当使用节点运行您的项目时,程序会自动加载index.js 更好的方法是从根本上编译项目,请参见https://github.com/vuejs/vue-next