2016-11-22 25 views
3

我想创建一个可以在浏览器和nodejs中使用的库。为了便于讨论,让我们说,这是我的图书馆:创建一个可用于浏览器和nodejs的打字稿库

export default class MyClass { 
    public getString(): string { 
     return "Message"; 
    } 
} 

ES2015模块浏览器不以现在支持,我不想依赖requirejs或任何其他模块加载在浏览器的时候 - 我希望仅通过使用script标签包含生成的.js文件来消费此库。感觉我想要的可以通过使用内部模块来实现(我不想污染全局命名空间)。 但是,当我将我的代码包装在namespace/module中时,我很难将其编译为commonjs模块。

什么是实现我想要的正确方法?或者,可能是,我正在完全脱离轨道这是一个打字稿和javascript noob?

+0

请解释downvotes。只要我知道为什么 - 我正在努力学习,只要冷静下来就行了。 (也是jquery似乎按照'https:// www.npmjs.com/package/jquery'来做我想要的,所以也许它不是完全离开轨道?) – Pawel

回答

4

我认为你需要的是UMD。随着tsconfig.json

{ "compilerOptions": { "module": "umd" }, }

生成的JavaScript看起来像这样

(function (factory) { if (typeof module === 'object' && typeof module.exports === 'object') { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { define(["require", "exports"], factory); } })(function (require, exports) { "use strict"; var MyClass = (function() { function MyClass() { } MyClass.prototype.getString = function() { return "Message"; }; return MyClass; }()); exports.__esModule = true; exports["default"] = MyClass; });

它可以在节点(CommonJS的)以及与浏览器(CommonJS的,AMD)。要允许您的磁带库用户通过script标签包含它,您需要模块打包程序,如Webpack,BrowserifyRollup。这些将会产生具有全局导出的UMD定义,因此您的库的主文件的默认导出将作为全局范围中的某个变量提供。

+1

我试过umd,但没有使用webpack/browserify对其进行后处理。我会试一试。 – Pawel

+0

看起来像browserify我可以为所有脚本创建一个包。我想'捆绑'只有我的图书馆。 – Pawel

+0

你试图“浏览”什么文件?你的图书馆的入口点,对吧? –