【问题标题】:Browserify with typescript modules - what are best design practices?Browserify with typescript modules - 什么是最佳设计实践?
【发布时间】:2015-10-02 03:00:33
【问题描述】:

我有一个 browserify javascript 项目,其中包含带有 require 语句的模块。我现在正在添加一些打字稿,当我只是 require 编译的 javascript 时它工作正常。

但 typescript 也有自己的 module 声明。这与 browserify/node 的模块有什么关系?我应该同时使用两者吗?这似乎是多余的。应该使用哪种类型的模块,在什么情况下? 谢谢。

【问题讨论】:

    标签: javascript node.js module typescript browserify


    【解决方案1】:

    在较新版本的 TypeScript (1.5) 中,module 已弃用,取而代之的是 namespace 关键字。关键字用于创建内部模块 - 允许您在内部组织代码。

    所以现在更明显的是,它们是不同的东西。仍然 TypeScript 提供了创建 browserify/node 的模块的能力 - 外部模块。为此,您可以使用 ES6 module syntax 或更旧的 TypeScript 语法。然后使用 browserify 插件(例如 tsify)进行更方便的构建。

    更多关于 TypeScript 模块和命名空间的文档可以在 here 找到(也描述了旧的外部模块语法)

    应该使用哪种类型的模块取决于开发人员的项目和品味。如果您以 Node.js 为目标,则值得使用 CommonJS 模块(TS 中的 IMHO ES6 语法并将其转换为 CommonJS)。如果您使用的是 browserify,那么使用外部模块也是合理的。建议仅在一个文件中使用命名空间 - 因此是内部模块。

    【讨论】:

    • 所以如果我做对了,你建议使用 tsify,然后简单地将 var stuff = require('./compiledStuff.js') 替换为 import * as stuff from "./rawStuff",这基本上只是转换为前者。然后根据需要使用打字稿命名空间进行进一步的内部组织。
    • 这种方法似乎效果很好,谢谢。查看编译后的打字稿,它确实只是将import 语句更改为requires。任何使用这种方法的人都应该非常小心地在所有imports(或requires)中使用一致的大小写。如果你不这样做,编译器不会抱怨,但它实际上会生成多个单独的命名空间,每个大写模式一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2010-09-18
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多