export & import
chameleon框架的编译时加载方案是在ES6的module能力基础上扩展的,主要由两个命令构成:export和import。
export 命令
export命令用于规定模块的对外接口。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。
// profile.js
const name = 'Mike';
const gender = 'male';
const age = 24;
export {name, gender, age};
import 命令、require命令
import命令和require命令用于输入其他模块提供的功能。
使用export命令定义了模块的对外接口以后,通过import
命令加载这些模块。
导入规范如下表所示:
当前文件后缀 | 仅限导入的类型 | 示例 |
---|---|---|
.cml | .js、.json |
import a from 'a.js'; import b from 'b.json'; |
*.[web|weex|wx|alipay|baidu|tt|qq].cml | .interface、.js、.json |
import a from 'a.js'; import b from 'b.json'; import c from 'c.interface'; |
.js | .interface、.js、.json |
import a from 'a.js'; import b from 'b.json'; import c from 'c.interface'; |
.interface | .js、.json | import a from 'a.js'; import b from 'b.json'; |
如果没有加后缀名,会依次查找后缀为.interface
, .js
的文件
// 会依次查找 profile.interface profile.js
import {name, gender, age} from './profile';
// 最后找到 profile.js
function setName(human) {
human.textContent = name + ' ' + gender + ' ' + age;
}
// 会依次查找 profile.interface profile.js
const {name,age,gender} = require('./profile')
// 最后找到 profile.js
function setName(human) {
human.textContent = name + ' ' + gender + ' ' + age;
}