编写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 = ...
是不允许的。
还没有玩过tsify
, tsify
, watchify
, jspm
,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/