编写TypeScript并发布浏览器和节点的库

我有一个在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 (...) {...}; 

节点:

 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 

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

我想要什么

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

什么使我困惑

在TypeScript中我发现了两种不同types的模块处理:

 import {a, b} from './x' 

 import c = require('./y') 

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

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

还没有玩过tsifytsifywatchifyjspm ,SystemJS, webpack – 这只是太相似和太多了,但我认为这些工具中的一个或几个可以为我做的工作。

而当我require(<a node module living in node_modules>) ,tsc找不到模块:“TS2307:无法find外部模块的时刻”。

具体的问题

  • 我应该在我的代码中使用哪种模块语法才能最好地使用Node和Browser?
  • 哪个工具链将解决我的要求? 有我可以从中复制的示例项目或样板文件吗? (我对Gulp也是开放的,不必使用Grunt)。
  • 目前支持哪些TypeScript和Node版本? 我有1.4embedded在IntelliJ,引用1.6.2作为外部时,我得到了非常深的神秘错误信息,如“TypeError:host.fileExists不是一个函数”(没有发现任何有用的东西)。 也许这不是使用Node v4.1.1的最佳select?

对不起,这个post太复杂了。 如果有必要的话,只要给我build议从哪里开始,或者最重要的事情要改变或开始。

我应该在我的代码中使用哪种模块语法才能最好地使用Node和Browser?

如果你的目标是es5那么这两种语法都可以编译成实际上相同的东西。 使用任一,并随意混搭。

哪个工具链将解决我的要求? 有一个示例项目或样板文件,我可以从中复制

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

目前支持哪些TypeScript和Node版本? 我有1.4embedded在IntelliJ,引用1.6.2作为外部时,我得到了非常深的神秘错误信息,如“TypeError:host.fileExists不是一个函数”(没有发现任何有用的东西)。 也许这不是使用Node v4.1.1的最佳select?

使用最新的TypeScript(来自TypeStrong的各种工具,例如atom-typescript / grunt-ts / ts-loader支持)。 你得到的错误是webstorm错误,应该向他们报告。 (我用primefaces打字稿)。

我还有WebStorm 10的TypeError:host.fileExists错误和一个自定义的Typescript编译器(通过npm安装)。

但是,这在WebStorm 11 (2015年11月2日发布)中解决https://www.jetbrains.com/webstorm/download/