【问题标题】:Typescript use shared library打字稿使用共享库
【发布时间】:2017-08-22 01:45:49
【问题描述】:

当拥有不同的代码库时,我将如何在它们之间共享代码。 所有代码都在打字稿中并在持续开发中。

我正在寻找一个简单的解决方案。

我尝试过的事情:

1 使用导入语句和其他项目的路径:

import { type } from '../../otherProj/src/type';

不起作用:

error TS2307: Cannot find module '../../otherProj/src/type'

2 npm 模块

使用本地安装

npm i ../otherProj

这是有问题的,因为我总是必须在每次更改时更新库的版本,或者我必须手动卸载/重新安装库。

3 git 子模块/子树

使用 git 子模块。

4 软链接/目录连接

由于我们在 Windows 上,我们现在使用 mklink /D /J

还有其他选择吗?

【问题讨论】:

    标签: git typescript npm


    【解决方案1】:

    2个npm模块

    使用npm link 链接模块。

    文档

    https://docs.npmjs.com/cli/link

    【讨论】:

    • 那么,假设我的模块是私有的并且仅由也使用 typescript 的项目使用,我会创建某种源包或单独编译库吗?
    • 什么模块??我们在谈论shared library,您是否建议每次都将其发布到npm?
    【解决方案2】:

    我最终设置了一个 gulp-task 来监视主要位置的代码库并将源和编译输出复制到辅助项目/目标。共享库位于两个项目的根目录中,并且具有相同的相对路径。

    在目标我已经 .gitignore'd 复制的源代码。

    这很好用,但有一个主要缺点,即编辑器中的符号引用导致我编辑镜像代码,而不是托管源代码。这可以通过使用 git“子模块”方法来改进,其中两棵树都将被管理,但我放弃了它,因为它似乎增加了复杂性和源服务器依赖性。

    来自带有编译和共享程序集的 .net,结果证明这是一个非常困难的问题,我怀疑尝试在 Typescript 中复制这种行为可能根本不是正确的方法吗?

    function compileUtils() {
        // Tried to use the tool syncy for this, but it did not work with "../", had to revert to manual sync.
        //   NB: This will break when bad files are removed and renamed.
        return gulp.src(utilsPath)
            .pipe(gulp.dest('./utils'));
    }
    
    function compileBuiltUtils() {
        // Copy of the above, copies the built utils files
        return gulp.src(utilsBuiltPath)
            .pipe(gulp.dest('./build/utils'));
    }
    

    【讨论】:

    • 顺便说一句:“监视和复制”方法的另一个问题是,它可能无法在没有两个代码库的远程服务器上使用 - 在相同的相对位置。跨度>
    • 我认为软链接优于复制和观看的 gulp 任务。你怎么看?
    • @Thomas 我认为你可能是对的。但是软链接需要在新机器上进行一些特定的设置,并且在部署到外部构建服务器时会导致相同或更多的问题。我认为没有什么特别好的选择。
    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2020-10-27
    • 2018-04-03
    • 2020-01-16
    • 1970-01-01
    • 2015-09-30
    • 2020-07-16
    相关资源
    最近更新 更多