编写TypeScript并为Browser和Node发出一个库

hgo*_*ebl 5 javascript node.js browserify typescript webpack

我有一个在Node.js和浏览器中使用的内部库.它有许多文件,与Grunt任务和不同的序言连接,一个用于浏览器,一个用于Node:

浏览器:

// dependent 3rd-party libs like Mustache are already global
window.myLib = { /*just a namespace object filled with stuff later*/ }

// then comes the plain javascript which just adds elements to myLib.
// This part is identical to that used in Node
// example:
myLib.renderPartDetail = function (...) {...};
Run Code Online (Sandbox Code Playgroud)

节点:

var Mustache = require('mustache');
var myLib = {};
module.exports = myLib;

// then comes the plain javascript which just adds elements to myLib.
// This part is identical to that used in Browser
Run Code Online (Sandbox Code Playgroud)

这导致2个不同的单输出js文件,一个用于浏览器,一个用于Node.

我想要什么

  • 使用TypeScript
  • 如果可能,请仅为浏览器和节点使用一个CommonJS语法(或ES6模块)
  • 投资于未来几个月不会死亡的事情
  • 更模块化(也许有人只需要lib的一部分)

让我困惑的是什么

我在TypeScript中找到了两种不同的模块处理:

import {a, b} from './x'
Run Code Online (Sandbox Code Playgroud)

import c = require('./y')
Run Code Online (Sandbox Code Playgroud)

我从节点习惯了后者,但第一个看起来像ES6(可能是未来).

目前我使用tsc --module commonjs但这只是输出格式,对吧?还有,--module system但我找不到这个选项的文档,当我使用它时,编译器抱怨export = ...是不允许的.

尚未打得四处browserify,tsify,watchify,jspm,SystemJS,webpack-它太相似,太多了,但我觉得一个或几个这些工具可以为我做的工作.

而当我require(<a node module living in node_modules>),tsc找不到模块:"TS2307:找不到外部模块'时刻'".

具体问题

  • 我应该在我的代码中使用哪种模块语法来最好地使用Node和Browser?
  • 哪个工具链能解决我的要求?我可以从中复制示例项目或样板吗?(我也对Gulp持开放态度,不必使用Grunt).
  • 目前支持哪些TypeScript和Node版本?我在IntelliJ中嵌入了1.4,当引用1.6.2作为外部时,我得到了非常深刻的隐秘错误消息,如"TypeError:host.fileExists不是函数"(没有找到任何有用的信息).也许使用Node v4.1.1不是最佳选择?

对不起,这篇文章太复杂了.如有必要,请告诉我从哪里开始或者最重要的事情是改变或开始.

bas*_*rat 5

我应该在代码中使用哪种模块语法才能最好地与 Node 和浏览器配合使用?

如果您的目标是es5,那么两种语法都会编译为实际上相同的东西。使用其中之一,并随意混合搭配。

哪个工具链可以解决我的需求?是否有示例项目或样板文件可供我复制

我使用(并推荐)webpack。您可以按原样使用 commonjs / nodejs,然后 webpack 可以为前端创建捆绑包。有关示例,请参阅https://github.com/basarat/tsb/tree/master

目前支持哪些 TypeScript 和 Node 版本?我将 1.4 嵌入到 IntelliJ 中,当将 1.6.2 引用为外部时,我收到非常深刻的神秘错误消息,例如“TypeError:host.fileExists 不是函数”(没有找到任何对此有帮助的信息)。也许使用 Node v4.1.1 不是最佳选择?

使用最新的 TypeScript(TypeStrong 的各种工具,例如atom-typescript/grunt-ts/ts-loader 支持)。您收到的错误是网络风暴错误,应该向他们报告。(我使用原子打字稿)。