javascript - 如何在没有任何额外依赖的情况下在浏览器中使用 UMD

标签 javascript html requirejs systemjs commonjs

假设我有一个像这样的 UMD 模块(保存在 'js/mymodule.js' 中):

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ?     factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (factory((global.mymodule = global.mymodule || {})));
}(this, function (exports) { 'use strict';
    function myFunction() {
        console.log('hello world');
    }
}));

如何在这样的 HTML 文件中使用此模块? (没有 requirejs、commonjs、systemjs 等...)

<!doctype html>
<html>
<head>
    <title>Using MyModule</title>
    <script src="js/mymodule.js"></script>
</head>
<body>
<script>
/* HOW TO USE myFunction from mymodule.js ??? */
</script>
</body>
</html>

非常感谢您的帮助。

最佳答案

好的,所以你在一个没有 RequireJS、CommonJS、SystemJS 等的环境中运行

关键行是 factory((global.mymodule = global.mymodule || {})) 它做了一些事情:

  1. 如果global.mymodule为真,那么它等同于

    global.mymodule = global.mymodule // A noop.
    factory(global.mymodule)
    
  2. 否则等同于:

    global.mymodule = {}
    factory(global.mymodule)
    

工厂内部:您的工厂应该通过分配给exports 来导出您想要从模块中导出的内容。因此,您可以通过执行 exports.myFunction = myFunction 来导出 myFunction

工厂外:在工厂外,导出的值将在mymodule 上,它被导出到全局空间。例如,当你想使用 myFunction 时,你可以执行 mymodule.myFunction(...)

如果不清楚。代码中的工厂是以 function (exports) { 开头的函数,您已在其中正确放置了 myFunction

关于javascript - 如何在没有任何额外依赖的情况下在浏览器中使用 UMD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38638210/

相关文章:

html - "break-inside: avoid-column"在 Firefox 中不起作用

javascript - RequireJS 不加载依赖项

javascript - 在 jquery 中读取和使用用户输入数据

javascript - 可以在 iPhone 中向下拖动页面 - Framework7 Cordova

python - BeautifulSoup - 如何在不打开标签和 <br> 标签之前提取文本?

jquery - 使用 require.js 配置 jquery 数据表并与backbone.js 一起使用

javascript - Angular-Jasmine,加载 json

javascript - 如何知道 nsIWebBrowserPersist 下载何时完成? (火狐 30、Javascript)

php - 如何根据输入数字动态生成文本框?

javascript - 如何在事件不是参数的函数中添加preventDefault