Dor*_*val 17 html javascript commonjs requirejs systemjs
假设我有一个这样的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');
}
}));
Run Code Online (Sandbox Code Playgroud)
如何在这样的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>
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
Lou*_*uis 16
好的,所以你在没有RequireJS,CommonJS,SystemJS等的环境中运行.
关键是factory((global.mymodule = global.mymodule || {}))这做了几件事:
如果global.mymodule真的,那就相当于
global.mymodule = global.mymodule // A noop.
factory(global.mymodule)
Run Code Online (Sandbox Code Playgroud)否则它相当于:
global.mymodule = {}
factory(global.mymodule)
Run Code Online (Sandbox Code Playgroud)工厂内部:您的工厂应该通过分配来导出要从模块导出的内容exports.所以你myFunction要做出口exports.myFunction = myFunction.
工厂外:在外部,出口值将mymodule输出到全球空间.myFunction例如,当您想要使用时mymodule.myFunction(...).
如果不清楚的话.您的代码中的工厂是以您function (exports) {正确放置的位置开头的函数myFunction.
简单的答案:如果你使用通常的UMD,它应该是可用的window.mymodule(或lib的任何名称).
在目前的形式,不能使用myFunction的()从myModule.js的。您的 myModule.js 根本没有公开(导出)任何内容。您必须首先将此行添加到 myModule.js
exports.myFunction = myFunction;
Run Code Online (Sandbox Code Playgroud)
这样你的模块代码就变成了:
(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');
}
// expose the inner function on the module to use it
exports.myFunction = myFunction;
}));
Run Code Online (Sandbox Code Playgroud)
现在,当您在 .html 文件中运行此代码时,浏览器会创建一个名为“mymodule”的全局对象,该对象具有此方法“myFunction”。
您可以在 .html 文件中调用此方法作为
myModule.myFunction();
Run Code Online (Sandbox Code Playgroud)
完整的 .html 文件将是:
<!doctype html>
<html>
<head>
<title>Using MyModule</title>
<script src="js/mymodule.js"></script>
</head>
<body>
<script>
/* HOW TO USE myFunction from mymodule.js ??? */
/* Answer: */
mymodule.myFunction();
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)