javascript - 将 javascript 库与不同文件中的命名空间和类捆绑在一起
问题描述
我有不同的文件,它们的命名空间和类是这样的:
1)命名空间.js:
var somenamespace = window.somenamespace || {};
2)类1.js:
somenamespace.class1= (function() {
var _public = {};
_public.someBoolean= false;
return _public;
})();
3)类2.js:
somenamespace.class2= (function() {
var _public = {};
_public.init= function() {
};
return _public;
})();
我需要捆绑它们并将它们公开在库中。像这样的东西:
expose default {
somenamespace
};
为了在另一个项目中使用它。像这样的东西:
import * as somenamespace from 'somenamespace';
var a = function() {
somenamespace.class1.someBoolean = true;
ansomenamespace.class2.init();
};
我该怎么做?(我还想公开其类型定义以供打字稿使用)谢谢!
解决方案
您正在混合import
/export
样式模块和附加到的类型window
。我建议选择其中一个。
例如将所有内容附加到window
:
命名空间.js
var somenamespace = window.somenamespace || {}; // not strictly necessary
class1.js
var somenamespace = window.somenamespace || {};
somenamespace.class1= (function() {
var _public = {};
_public.someBoolean= false;
return _public;
})();
class2.js
var somenamespace = window.somenamespace || {};
somenamespace.class2= (function() {
var _public = {};
_public.init= function() {
};
return _public;
})();
使用模块
// no import, just read it off of window
var a = function() {
window.somenamespace.class1.someBoolean = true;
window.ansomenamespace.class2.init();
};
或者,我推荐import
/ export
,尽管您需要使用 Babel 或 Webpack 或类似的东西来编译您的代码,因为并非所有浏览器都支持 ES 模块:
命名空间.js
export {class1} from './class1'
export {class2} from './class2'
class1.js
export const class1 = (function() {
var _public = {};
_public.someBoolean= false;
return _public;
})();
class2.js
export const class2 = (function() {
var _public = {};
_public.init= function() {
};
return _public;
})();
使用模块
import * as somenamespace from './namespace'
var a = function() {
somenamespace.class1.someBoolean = true;
ansomenamespace.class2.init();
};
推荐阅读
- tfs - Mac 上的 tee-clc - 抛出 IllegalArgumentException: update.isFullyPopulated(setFileTimeToCheckin)
- apache - OrientDB 的 DocumentRoot 是什么?或者,OrientDB 的网络文件在哪里?
- java - 有效载荷类型的弹簧卡夫卡模糊方法
- windows - 为什么提交大小有时小于工作集(Windows 内存)
- java - 如何使表格组件中的所有行都拉伸到相同的高度?
- f# - 带有 Azure SQL Server / Azure Active Directory 的 FSharp 类型提供程序
- flask - 如何在 WTForms 中输入列表?
- mysql - mysqlcheck 返回错误信息 mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) 尝试连接时
- ios - 更改右栏项目上的标签文本swift 4
- javascript - Video.js 删除 HTML 跨度