无法为前端javascript和后端打字稿编写自定义打字稿包

时间:2020-10-09 14:56:50

标签: javascript node.js typescript npm

这是我的情况:

  1. 在两个不同的存储库(后端和前端)中构建网站。
  2. 后端几乎完全用打字稿编写,而前端则完全用javascript(React + Redux + Next)编写。
  3. 我想在后端和前端都使用一组复杂的自定义数据模型/对象,因此我决定构建第三个存储库,并将其作为内部软件包来处理。这个项目(完全用打字稿编写)。
  4. 由于后端和前端将程序包用于不同的事情,因此我正在尝试设计程序包,以便后端有一个子模块,前端有一个子模块(以及这两个程序包之间的共同点) 。

我的目标: 设置程序包的配置,以便我可以从前端项目(javascript)和后端项目(typescript)中的相应子模块中自由导入。

我遇到的问题: 我认为这主要是由于我对软件包的工作方式/构建软件包时的编译工作缺乏了解,但是我在使软件包的适当部分在项目的两面都可以自由导入/使用方面遇到了巨大的困难。在调整配置(package.json / tsconfig.json)时,我看到了以下问题:

  1. 无法识别导出命令(在前端,当我没有构建为commonjs时)。切换到tsconfig.json中的module ='commonjs'可以解决此问题。
  2. 导入程序包后,程序包内部的别名路径似乎无法正常工作(在打字稿方面)。相对于别名路径(例如tsconfig.json中的路径和package.json中的_moduleAliases),切换到相对路径可以解决此问题。
  3. 当尝试从事物的前端子模块对类/函数进行分类时,模块未找到问题(我认为可以通过将index.ts放在项目的子目录中来解决)。

我主要在寻找什么:

关于我应该如何构造我的包裹以适合我的需求的说明。由于这可能是由于缺乏对程序包构建/翻译工作原理的深入了解,因此向我指出一些好的资源(或者至少是Google的正确建议)将非常有用/非常感谢。

我不想要的东西:

  1. 告诉我我要解决这个错误,不应构建这样的程序包。我知道在选择使用具有多个存储库的单个程序包与使用诸如多个存储库的多个程序包或其中包含子模块的单个存储库(不包含程序包)的替代方案时,我会做出选择。我想要这样构建它,部分是为了方便起见,部分是为了使我能够更深入地了解这些事物的工作方式以及它们如何组合在一起。
  2. 告诉我仅使用打字稿或仅使用javascript。我正在尝试构建一个可以同时支持两者的软件包。

这是我当前正在使用的tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2015",
    "sourceMap": true,
    "allowJs": false,
    "declaration": true,
    "moduleResolution": "node",
    "esModuleInterop": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "paths": {
      "@/*": ["src/*"]
    }
  },
  "include": [
    "src/**/*"
  ],
  "exclude": ["node_modules", "dist"]
}

这是我当前正在使用的package.json:

{
  "name": "package-name-goes-here",
  "version": "1.0.0",
  "description": "description-goes-here",
  "main": "dist/index.js",
  "module": "dist/index.js",
  "types": "dist/index.js",
  "scripts": {
    "build": "ttsc"
  },
  "files": [
    "src",
    "dist"
  ],
  "devDependencies": {
    "ttypescript": "^1.5.12",
    "typescript": "^4.0.3"
  },
  "_moduleAliases": {
    "@": "dist"
  },
  "dependencies": {
    "lodash": "^4.17.20"
  }
}

要部署此软件包,我运行ttsc(或npm run build)并推送到我的私有github存储库。然后,我使用git + ssh使用npm安装软件包:

npm install "git+ssh://git@github.com/Org-Name/package-names-goes-here.git"

在此先感谢您的帮助,让我知道是否可以提供其他帮助信息!

0 个答案:

没有答案