提问者:小点点

发布到NPM和CDN


这是我第一次编写一个非常基本的JavaScript库,现在我打算发布它。我将它作为一个函数编写,用户可以通过CDN简单地导入JavaScript文件。我也打算把它发布到NPM,这样用户就可以把它和JS捆绑程序一起使用了。

我创建了另一个文件来匹配node.js格式,基本上,我在函数之前添加了module.exports=,这一切都起作用了。所以,现在我得到了两个代码基本相同的文件,一个用于CDN,一个用于NPM。有没有办法把这个统一起来,基本上都合并在同一个文件里?

我真的很想知道这通常是怎么做的。当一个函数被写入以作为CDN导入时,它如何被转换成节点模块?创建一个单独的文件是唯一的方法,还是我遗漏了什么?


共1个答案

匿名用户

这个问题很容易通过谷歌搜索得到答案,但我认为这是一个有趣且写得很好的问题,所以我在这里转录一些结果来帮助其他人:

从这篇博文来看:

UMD

UMD(Universal Module Definition)是一个代码块,我们可以用来包装我们的库。这段代码使得在前端和节点中都可以使用库。

它看起来是这样的:

    (function (root, factory) {
        if (typeof define === 'function' && define.amd) {
            // AMD. Register as an anonymous module.
            define(['b'], factory);
        } else if (typeof module === 'object' && module.exports) {
            // Node.
            module.exports = factory(require('b'));
        } else {
            // Browser globals (root is window)
            root.returnExports = factory(root.b);
        }
    }(typeof self !== 'undefined' ? self : this, function (b) {
        // Use b in some fashion.

        // Just return a value to define the module export.
        // This example returns an object, but the module
        // can return a function as the exported value.
        return {};
    }));

你可以在这里阅读更多关于UMD的内容。

通常,我会建议您使用绑定程序/构建工具来为您自动化这一点,并使代码在更多的环境中可用。

Webpack是一个很好的选择。