# 模块
10.1 用(
import
/export
) 模块而不是无标准的模块系统。你可以随时转到你喜欢的模块系统。Why? 模块化是未来,让我们现在就开启未来吧。
// bad const AirbnbStyleGuide = require('./AirbnbStyleGuide'); module.exports = AirbnbStyleGuide.es6; // ok import AirbnbStyleGuide from './AirbnbStyleGuide'; export default AirbnbStyleGuide.es6; // best import { es6 } from './AirbnbStyleGuide'; export default es6;
10.2 不要用import通配符, 就是
*
这种方式Why? 这确保你有单个默认的导出
// bad import * as AirbnbStyleGuide from './AirbnbStyleGuide'; // good import AirbnbStyleGuide from './AirbnbStyleGuide';
10.3 不要直接从import中直接export
Why? 虽然一行是简洁的,有一个明确的方式进口和一个明确的出口方式来保证一致性。
// bad // filename es6.js export { es6 as default } from './AirbnbStyleGuide'; // good // filename es6.js import { es6 } from './AirbnbStyleGuide'; export default es6;
10.4 一个路径只 import 一次。 eslint:
no-duplicate-imports
(opens new window)Why? 从同一个路径下import多行会使代码难以维护
// bad import foo from 'foo'; // … some other imports … // import { named1, named2 } from 'foo'; // good import foo, { named1, named2 } from 'foo'; // good import foo, { named1, named2, } from 'foo';
10.5 不要输出可变的变量 eslint:
import/no-mutable-exports
(opens new window)Why? 变化通常都是需要避免,特别是当你要输出可变的绑定。虽然在某些场景下可能需要这种技术,但总的来说应该导出常量。
// bad let foo = 3; export { foo } // good const foo = 3; export { foo }
10.6 在一个单一导出模块里,用
export default
更好。 eslint:import/prefer-default-export
(opens new window)Why? 鼓励使用更多文件,每个文件只做一件事情并导出,这样可读性和可维护性更好。
// bad export function foo() {} // good export default function foo() {}
10.7
import
放在其他所有语句之前。 eslint:import/first
(opens new window)Why? 让
import
放在最前面防止意外行为。// bad import foo from 'foo'; foo.init(); import bar from 'bar'; // good import foo from 'foo'; import bar from 'bar'; foo.init();
10.8 当 import 引入的变量过多,一行放不下,这时要像多行数组一样进行换行。
Why? 花括号与样式指南中每个其他花括号块遵循相同的缩进规则,逗号也是。
// good import { longNameA, longNameB, longNameC, longNameD, longNameE, } from 'path';
10.9 在import语句里不允许Webpack loader语法 eslint:
import/no-webpack-loader-syntax
(opens new window)Why? 一旦用Webpack语法在import里会把代码耦合到模块绑定器。最好是在
webpack.config.js
里写webpack loader语法// bad import fooSass from 'css!sass!foo.scss'; import barCss from 'style!css!bar.css'; // good import fooSass from 'foo.scss'; import barCss from 'bar.css';