我有一个TypeScript项目,我将其作为NPM模块发布。编译项目的输出位于目录implicit object jodaDateTimeFormat extends Format[DateTime] {
private lazy val dateTimeFormatter = DateTimeFormat.forPattern("yyy-MM-dd'T'HH:mm:ssZ")
def reads(json: JsValue): JsResult[DateTime] = json match {
case JsNumber(d) => JsSuccess(new DateTime(d.toLong)) // Parse timestamps
case JsString(d) => JsSuccess(dateTimeFormatter.parseDateTime(d)) // Parse ISO 8601 Dates
case _ => JsError(Seq(JsPath() -> Seq(JsonValidationError("error.expected.date"))))
}
def writes(d: DateTime): JsValue = JsNumber(d.getMillis)
}
implicit object jodaDateTimeOptionFormat extends Format[Option[DateTime]] {
private lazy val dateTimeFormatter = DateTimeFormat.forPattern("yyy-MM-dd'T'HH:mm:ssZ")
def reads(json: JsValue): JsResult[Option[DateTime]] = json match {
case JsNumber(d) => JsSuccess(Some(new DateTime(d.toLong))) // Parse timestamps
case JsString(d) => JsSuccess(Some(dateTimeFormatter.parseDateTime(d))) // Parse ISO 8601 Dates
case _ => JsError(Seq(JsPath() -> Seq(JsonValidationError("error.expected.date"))))
}
def writes(d: Option[DateTime]): JsValue = if (d.isDefined) JsNumber(d.get.getMillis) else JsNull
}
中,这意味着当我发布时,NPM模块也采用上述文件结构。
缺点是当需要单个模块时,它看起来像这样:
{mymodule}/dist/src/...
我想展平已发布模块的输出,其中已发布模块中的文件将为var individualModule = require('/dist/src');
而不是{mymodule}/...
答案 0 :(得分:1)
在我看来,这样做的正确方法是故意通过根文件中的module.exports
(或import/export
)公开包中的模块。
const exposableOne = require('/dist/src/ex-1.js');
const exposableTwo = require('/dist/src/ex-2.js');
// ...
module.exports = { mymodule, exposableOne, exposableTwo };
您可以查看主Express framework file - 他们使用exports.
指令执行几乎相同的操作。
不完全是TypeScript的东西,但想法很常见。
<强>更新强>
如果你真的需要这样做而不通过require/exports
进行绑定,那么你可以使用符号链接方法。我不确定此选项是否适用于所有平台,但举例来说,您可以在GitHub上查看此solved issue和this repository。后者中的aliases
目录包含符号链接到recipes
目录模块的文件。