我正在开发一个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/
似乎是一种反模式。
我尝试根据评论切换到yarn
。在这方面,它表现出与NPM完全相同的行为。即,yarn link
命令始终指向带有package.json
的文件夹。再次,这迫使我在导入中使用src/
文件夹,这在指向生产NPM软件包的生产版本中将不起作用。
答案 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