【问题标题】:Compile typescript project as local module将 typescript 项目编译为本地模块
【发布时间】:2017-02-13 00:21:12
【问题描述】:

tl;博士

我可以让 typescript 将不同的文件夹编译为单独的库,然后像节点模块一样导入结果吗?


例如,我有一个包含 800 个文件的 common 文件夹,然后是几个 app 文件夹(app1app2 等),每个文件夹包含 20 个+/-文件。所有app 文件夹都引用了common 文件夹内的类/接口/等。问题是,每当我编译 app 文件夹时,它也会编译所有 800 个 common 文件。这个编译时间太长了,我真的很想避免它。

我已经在commonapp1 中使用tsc --diagnostics --listFiles 测试并确认了这一点。

我尝试使用tsconfig.json 中的exclude 属性来忽略common 文件夹,但似乎没有效果。我也尝试了baseDirpaths等在compilerSettings中的多种配置,但都无济于事。

noResolve 似乎几乎达到了我想要的效果,但这安全吗??

有没有办法单独编译,避免一直重新编译独立的common项目?


技术栈:

  • Angular 2.0.1
  • SystemJS 0.19.39
  • 打字稿 2.0.3
  • Windows 8.1
  • ASP.NET MVC6

【问题讨论】:

    标签: angular typescript tsc


    【解决方案1】:

    将你的公用文件夹分离到一个不同的项目调用common,并使其成为一个node.js模块,指令在这里:

    https://docs.npmjs.com/getting-started/creating-node-modules

    然后在您的原始项目中,您执行以下操作:

    方法一

    npm link <folder path of common>
    

    方法二

    npm install <folder path of common> --save
    

    方法 1 更易于使用,因为对 common 的更新会自动反映在主项目中,无需担心更新。

    如果您打算稍后将其作为独立的 npm 包发布,则方法 2 很好。但是更新到common 需要在主项目中进行手动更新。

    确保在您的 common 文件夹中创建一个 .npmignore 文件。假设您的 common 项目具有以下结构:

    .                                                                                                                                                               
    ├── index.d.ts
    ├── index.js                                                                                                                                                    
    ├── lib/  <--- compiled location                                                                                                                               
    ├── node_modules                                                                                                                                                
    ├── package.json                                                                                                                                                
    ├── src/                                                                                                                                                         
    ├── tsconfig.json                                                                                                                                               
    ├── typings                                                                                                                                                     
    └── typings.json
    

    那么您的.npmignore 应该如下所示:

    .DS_Store
    .git
    .gitignore
    examples
    node_modules
    npm-debug.log
    src
    tsconfig.json
    typings
    typings.json
    

    你可以看看我的ng2-simple-mq作为例子。

    【讨论】:

    • 我不知道这是否真的能解决我的问题。我可以很好地捆绑整个事情,它只是以一种低效的方式进行。我想看看 vanilla Typescript 编译器是否可以将“项目”编译为本地模块。
    • @JimmyBoh 其实还有更简单的方法。
    • @JimmyBoh 更新了。
    • 嗯,我没有想到使用npm install &lt;localpath&gt;,这是一个不错的主意。但这会导致嵌套的node_module 文件夹(根项目级别和每个app 文件夹内),这可能不是一件坏事。另外需要如何处理更新(再次致电npm install,升级版本等)?
    • @JimmyBoh (1) common 项目最好放在应用程序项目文件夹之外。所以它成为独立的图书馆项目。 (2) 版本提升有效,或者手动从应用的 node_modules 中删除也有效。
    猜你喜欢
    • 2017-01-22
    • 2016-06-17
    • 1970-01-01
    • 2012-09-29
    • 2012-07-05
    • 2018-12-31
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多