RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1048159
Accepted
muturgan
muturgan
Asked:2020-11-20 03:05:09 +0000 UTC2020-11-20 03:05:09 +0000 UTC 2020-11-20 03:05:09 +0000 UTC

从 npm 模块导入 TS 文件

  • 772

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

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

但是现在事实证明,如果只是简单的从include包中的TS文件中导出一些代码,那么在执行编译好的微服务的时候就会报错,因为 微服务代码尝试从外部库导入某些内容,但找不到包含此类内容的 JS 文件。

而为了这样一个系统的正确运行,我不仅需要对包含的包的 TS 代码进行更改,还需要构建它们,将编译后的代码推送到存储库并发布也包含此编译代码的 npm 包。
什么不方便,看起来很奇怪,也很容易忘记。

有没有办法以仅发布(并保持最新)TS代码的方式组织存储库/ npm包,并且在编译微服务时,TS代码从导入中提取,并且JavaScript将在一个地方生成一次部署?

node.js
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. ThisMan
    2020-05-04T05:18:16Z2020-05-04T05:18:16Z

    有没有办法以仅发布(并保持最新)ts 代码的方式组织存储库/npm 包,并且在编译微服务时,从导入中提取 ts 代码并在一个地方生成一次 javascript在部署期间?

    当然有,你可以在包里放任何东西,甚至是你的狗儿时的照片,甚至是可执行文件。问题是为什么?

    npm包是一些已构建的即用型代码,不需要额外的步骤即可使用。只需导入/连接它就可以了。如果你只在使用时放入包ts,你肯定要编译ts它,但如果你在项目中不使用它怎么办ts?为了一个数据包,它会产生开销。

    而为了这样一个系统的正确运行,我不仅需要对包含的包的 ts 代码进行更改,还需要构建它们,将编译后的代码推送到存储库并发布也包含此编译代码的 npm 包。

    您如何准确地测试您在包本身中编写的代码?为什么构建ts > js看起来很奇怪?有ts一个参数watch可以在文件更改时立即重新编译文件+它还构建类型。因此,在编写代码时,您将立即拥有一个现成js的dist。

    发布 npm 包也包括这个编译的代码

    软件包不必发布,它们可以通过file:path/to/local/module. 然后你所要做的就是重新安装包

    rm -rf nodu_modules && npm install local_module
    // либо обновить версию пакета и запустить
    npm update
    

    添加编译ts到package.json

    "scripts": {
      "ts-build": "ts --watch"
    }
    

    然后,在需要连接包的地方,使用本地路径

    "dependencies": {
      "local_module": "file:path/to/module"
    }
    

    你的包会被认为是什么,ts你可以使用类型 assembly + 字段typespackage.json

    • 1
  2. Qwertiy
    2020-05-05T07:29:09Z2020-05-05T07:29:09Z

    您package.json必须指定

    "main": "some-file.ts",
    

    然后在安装包并从中导入时,将使用打字稿代码。同时,您根本不需要将编译后的代码保留在存储库中(但是,您应该确保项目之间的 typescript 版本相同)。

    要运行打字稿代码,您可以使用tsnode(如果我们谈论的是后端)。在webpack的情况下,只有webpack项目本身会被编译成js,并且会以ts的形式拖拽所有的依赖,重新编译自己。

    • 1
  3. Best Answer
    muturgan
    2020-05-05T07:01:41Z2020-05-05T07:01:41Z

    显然有很多方法。我自己想出了以下一个。收紧 github 操作以在推送到 master 时自动构建并上传到 npm。有必要对其进行改进,以便所有这些仅在版本发生更改时才会发生,但您已经想睡觉了(无论如何它都会工作,因为如果版本没有更改,那么发布者将出现错误,只是管道将旋转很长时间)。

    这是该操作的 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 }}
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5