【问题标题】:Import local npm package using scope使用范围导入本地 npm 包
【发布时间】:2019-08-21 17:27:18
【问题描述】:

我的单一仓库:

/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 都没有成功。

如何设置?

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 链接(你建议的)和相对文件导入(我尝试的)有什么区别 - 它们似乎重叠?
    • npm link 会告诉你的包从你的计算机上的路径安装链接的依赖到你的 node_modules,而相对导入只会告诉 node 在运行时从文件夹中加载模块
    • 我还注意到该链接不会触及 package.json,这意味着当我部署它时它会中断(除非有人记得在生产服务器上运行它......所以不是这样的便携式解决方案)
    • @lonix 抱歉没有意识到您在询问别名,请参阅我的编辑
    • 感谢您的更新,看起来很酷的包...这是完成此任务的唯一方法吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2018-09-19
      • 1970-01-01
      • 2021-10-26
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多