【问题标题】:Right way to import ts files from an npm module从 npm 模块导入 ts 文件的正确方法
【发布时间】:2020-03-15 10:01:36
【问题描述】:

需要将 ts 项目拆分为多个存储库/包,并从它们的各种组合中构建微服务。在一个微服务中需要一些包,在另一个中需要一些包,在所有微服务中需要一些包。

在部署时编译代码并执行 JS 文件(当然)。

但是现在事实证明,如果一个插件包只是简单地从一个ts文件中导出一些代码,那么在编译的微服务执行过程中就会出现错误,因为微服务代码试图从外部库中导入一些东西并且确实找不到具有此类内容的 js 文件。

为了正确维护这样一个系统,我不仅需要更改连接包的 ts 代码,还需要构建它们,将编译后的代码推送到存储库中,并发布 npm 包,包括这个编译后的代码。
很不方便,看起来很奇怪,而且很容易忘记。

有没有办法组织存储库/npm 包,只发布 TS 代码(并保持最新),在微服务上编译 ts 代码时从外部库和 JavaScript 中提取在部署期间在一个地方生成一次?

【问题讨论】:

  • 不是您问题的直接答案,但我们解决了与 lerna 非常相似的问题。可能值得一看。

标签: node.js typescript npm import microservices


【解决方案1】:

显然有很多方法。我已经为自己想出了下一个。在推送到主服务器时,拧紧 github 操作以自动构建并上传到 npm。我将不得不修改所有这一切只有在版本发生变化但已经昏昏欲睡的情况下才会发生(这样可以工作,因为如果版本没有变化,那么 pablish 错误将会下降,只是管道长时间旋转)。

这是该操作的第一个 yaml 文件版本:

name: npm-publish

on:
  push:
    branches: [ master ]

jobs:
  npm-publish:
    name: npm-publish
    runs-on: ubuntu-latest
    steps:
    - name: Checkout repository
      uses: actions/checkout@master

    - name: Set up Node.js
      uses: actions/setup-node@master
      with:
        node-version: 12
        registry-url: https://registry.npmjs.org/

    - name: Remove a dist folder from gitignore
      run: sed -i '$ d' .gitignore

    - name: Install dependencies
      run: npm i

    - name: Build
      run: npm run build

    - name: Publish
      run: npm publish
      env:
        NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 2020-01-11
  • 1970-01-01
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2020-02-10
相关资源
最近更新 更多