使用范围导入本地npm软件包

时间:2019-03-31 10:31:53

标签: node.js typescript npm package.json tsconfig

我的monorepo:

/app1
  package.json
/app2
  package.json
/shared
  package.json

shared/package.json"name": "@company/shared"

应用程序项目的package.json文件具有依赖性"@company/shared": "file:../shared"

当引用共享代码时,我想要一种“短”样式,当事物四处移动时,这种样式也不太容易被破坏:

import { foo } from "@company/shared"

但这不起作用,所以我必须这样做::

import { foo } from "../../../../../shared/src/something"

我摆弄package.jsontsconfig.json都没有成功。

我该如何设置?

2 个答案:

答案 0 :(得分:1)

您应该使用npm-link将共享软件包链接到依赖软件包。

cd ~/shared                 # go into the package directory
npm link                    # creates global link
cd ~/app1                   # go into some other package directory.
npm link @company/shared    # link-install the package

这将告诉npm从共享文件夹安装软件包,并使用对原始软件包所做的任何更改进行更新

有关更多信息,请参见https://docs.npmjs.com/cli/link.html

编辑: 直到现在,我才意识到您打算将共享程序包上传到服务器。在这种情况下,您可以使用module-alias软件包https://www.npmjs.com/package/module-alias

这将允许您进行诸如const sharedModule = require('@shared/moduleName');

的导入

编辑#2: 对于打字稿,请使用https://www.npmjs.com/package/tsconfig-paths

答案 1 :(得分:1)

实际上我上面的代码中缺少一部分。

共享项目需要将共享的内容导出到index.js(即“桶”文件)中,并将导出的内容reference that导出到package.json中:

"main": "dist/index.js",
"types": "dist/index.d.ts",

然后别名导入样式起作用。