使用导入将显示模块模式 javascript 的单个文件转换为多文件
Converting single file revealing module pattern javascript to multi-file using import
我是 JS 设计模式的新手,并没有使用太多 require
或 import
。我有一个包含多个函数和私有变量的模块,它被打包到一个模块中。目前一切都在一个文件中,但将其拆分为多个文件将是一种很好的做法,并且可以提供更好的清晰度。模块模式的简化视图如下所示:
let Module = () => {
//some private variables
let private1,
private2;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
//private function processData
function processData(data) {
return data.trim();
}
return {
addDatatoPrivate1: addDatatoPrivate1,
addDatatoPrivate2: addDatatoPrivate2,
}
}
我想将函数拆分成多个文件,即 addDatatoPrivate1
、addDatatoPrivate2
和 processData
的单独文件。此外,我希望变量 private1
和 private2
可私下用于模块中的其他方法。我如何将代码拆分为多个文件,然后如何使用 import
将模块的不同组件打包成一个。
最终目标是让用户可以加载到他们自己的项目中并使用诸如 d3js 或 jQuery 之类的东西。例如,使用上面的代码,任何人都可以简单地将模块分配给一个变量并像这样使用它:
let moduleInstance = Module();
moduleInstance.addDatatoPrivate1(' some data here ');
moduleInstance.addDatatoPrivate2(' some data here2 ');
你可以使用 ES6 modules
.
步骤:
- 创建模块文件,假设文件名为 'someModule.js' 并在其中添加代码并使用
ES6
export
. 导出方法
//some private variables
let private1,
private2;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
//private function processData
function processData(data) {
return data.trim();
}
return {
addDatatoPrivate1: addDatatoPrivate1,
addDatatoPrivate2: addDatatoPrivate2,
}
export {
processData,
addDatatoPrivate1,
addDatatoPrivate2,
}
现在模块的用户可以像下面这样导入模块。
使用ES6
对象解构
import {addDatatoPrivate1, addDatatoPrivate2, processData} from './someModule'
addDatatoPrivate1(' some data here ');
addDatatoPrivate2(' some data here2 ');
或使用通配符 (*)
import * as moduleInstance from './someModule'
moduleInstance.addDatatoPrivate1(' some data here ');
moduleInstance.addDatatoPrivate2(' some data here2 ');
It's not possible to export a variable privately. Anything exported from module is public by default.
如果你想为每个模块创建单独的模块,那么你可以执行如下操作。
We could use ES6
default export to avoid object destructuring.
module1.js
function processData(data) {
return data.trim();
}
export default processData;
module2.js
import processData from './module1';
//some private variables
let private1;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
export default addDatatoPrivate1;
module3.js
import processData from './module1';
//some private variables
let private2;
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
export default addDatatoPrivate2;
然后您可以包含这些模块和一些其他文件。
import addDatatoPrivate1 from './module2';
import addDatatoPrivate2 from './module3';
addDatatoPrivate1(' some data here ');
addDatatoPrivate2(' some data here2 ');
或者您可以将所有方法导出到一个文件中,以便其他人可以导入并使用。
index.js
import addDatatoPrivate1 from './module2';
import addDatatoPrivate2 from './module3';
export {
addDatatoPrivate1,
addDatatoPrivate2
}
我是 JS 设计模式的新手,并没有使用太多 require
或 import
。我有一个包含多个函数和私有变量的模块,它被打包到一个模块中。目前一切都在一个文件中,但将其拆分为多个文件将是一种很好的做法,并且可以提供更好的清晰度。模块模式的简化视图如下所示:
let Module = () => {
//some private variables
let private1,
private2;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
//private function processData
function processData(data) {
return data.trim();
}
return {
addDatatoPrivate1: addDatatoPrivate1,
addDatatoPrivate2: addDatatoPrivate2,
}
}
我想将函数拆分成多个文件,即 addDatatoPrivate1
、addDatatoPrivate2
和 processData
的单独文件。此外,我希望变量 private1
和 private2
可私下用于模块中的其他方法。我如何将代码拆分为多个文件,然后如何使用 import
将模块的不同组件打包成一个。
最终目标是让用户可以加载到他们自己的项目中并使用诸如 d3js 或 jQuery 之类的东西。例如,使用上面的代码,任何人都可以简单地将模块分配给一个变量并像这样使用它:
let moduleInstance = Module();
moduleInstance.addDatatoPrivate1(' some data here ');
moduleInstance.addDatatoPrivate2(' some data here2 ');
你可以使用 ES6 modules
.
步骤:
- 创建模块文件,假设文件名为 'someModule.js' 并在其中添加代码并使用
ES6
export
. 导出方法
//some private variables
let private1,
private2;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
//private function processData
function processData(data) {
return data.trim();
}
return {
addDatatoPrivate1: addDatatoPrivate1,
addDatatoPrivate2: addDatatoPrivate2,
}
export {
processData,
addDatatoPrivate1,
addDatatoPrivate2,
}
现在模块的用户可以像下面这样导入模块。
使用ES6
对象解构
import {addDatatoPrivate1, addDatatoPrivate2, processData} from './someModule'
addDatatoPrivate1(' some data here ');
addDatatoPrivate2(' some data here2 ');
或使用通配符 (*)
import * as moduleInstance from './someModule'
moduleInstance.addDatatoPrivate1(' some data here ');
moduleInstance.addDatatoPrivate2(' some data here2 ');
It's not possible to export a variable privately. Anything exported from module is public by default.
如果你想为每个模块创建单独的模块,那么你可以执行如下操作。
We could use
ES6
default export to avoid object destructuring.
module1.js
function processData(data) {
return data.trim();
}
export default processData;
module2.js
import processData from './module1';
//some private variables
let private1;
//some public functions
function addDatatoPrivate1 (data) {
private1 = processData(data);
}
export default addDatatoPrivate1;
module3.js
import processData from './module1';
//some private variables
let private2;
function addDatatoPrivate2 (data) {
private2 = processData(data);
}
export default addDatatoPrivate2;
然后您可以包含这些模块和一些其他文件。
import addDatatoPrivate1 from './module2';
import addDatatoPrivate2 from './module3';
addDatatoPrivate1(' some data here ');
addDatatoPrivate2(' some data here2 ');
或者您可以将所有方法导出到一个文件中,以便其他人可以导入并使用。
index.js
import addDatatoPrivate1 from './module2';
import addDatatoPrivate2 from './module3';
export {
addDatatoPrivate1,
addDatatoPrivate2
}