Node 编码规范

Node 编码规范

  • 缩进 ,2 个 space,tab要转换成2 space. (入乡随俗,这是Node 源码及module 采用的标准)
    Eclipse设置

  • 永远用 var 声明变量,不加 var 时,会污染顶层上下文

  • 操作符与操作算子之间要有空格

    Right:

      var string = 'Foo' + bar;
    
    

    Wrong:

      var string = 'Foo'+bar;
    
    
  • 使用string 时,用单引号替代双引号(写JSON 时除外)

    Right:

    var foo = 'bar';
    
    var http = require('http');
    
    

    Wrong:

    var foo = "bar";
    
    var http = require("http");
    
    
  • 大括号位置

    Right:

    if (true) {
      console.log('winning');
    }
    
    

    Wrong:

    if (true)
    {
      console.log('losing');
    }
    
    
  • Camel 命名法

    采用以下规则:

    • 函数和变量:functionNamesLikeThis, variableNamesLikeThis,
    • 类名和枚举类型:ClassNamesLikeThis, EnumNamesLikeThis,
    • 类方法:methodNamesLikeThis
    • 常量:SYMBOLIC_CONSTANTS_LIKE_THIS

    Right :

    // var definition
    var adminUser = db.query('SELECT * FROM users ...');
    
    // function definition
    function run(){
    }
    
    // Class definition
    function BankAccount() {
    }
    
    

    Wrong:

    var admin_user = db.query('SELECT * FROM users ...");
    
    function bankAccount() {
    }
    
    
  • 文件命名

    单词之间使用 ‘_’ underscore 来 分割,如果你不想暴露某个文件给用户 , 你也可以用‘_’ 来开头

    Right :

    child_process.js
    string_decoder.js
    _linklist.js
    
    
  • 不使用 const 关键字 虽然V8 和 Mozilla 都支持它,但它不是ECMA 标准,我们用以下方式定义常量:

    Right:

    var SECOND = 1 * 1000;
    function File() {
    }
    File.FULL_PERMISSIONS = 0777;
    
    
  • 比较操作 有的场景下应该用 "===" 替代 "==" 当你遇到这些符号比较时 :0 undefined null false true

    你应该小心谨慎 比如 ' \t\r\n' == 0  比较结果是true

    Right:

    var a = 0;
    if (a === '') {
      console.log('winning');
    }
    
    

    Wrong:

    var a = 0;
    if (a == '') {
      console.log('losing');
    }
    
    
  • 使用字面表达式,用 '{}' ,'[]' 代替 new Arraynew Object

    不要使用 stringboolnumber 的对象类型,即不要调用 new Stringnew Booleannew Number

  • Object ,Array 创建,当有多个元素时,注意分行排列时逗号的位置

    Right:

    var a = ['hello', 'world'];
    var b = {
      good: 'code',
      'is generally': 'pretty',
    };
    
    

    Wrong:

    var a = [
      'hello', 'world'
    ];
    var b = {"good": 'code'
      , is generally: 'pretty'
    };
    
    
  • 避免使用 “with” 与 “eval”

  • for-in 循环,仅在 object/hash/map 时使用,绝不要对Array 使用

  • 不要把Array 当做关联数组或Object 使用,即你不应该用非数字作为Array 的索引 (Phper 尤其注意这点)
    Wrong :

    var a = []; // use '{}' instead
    a['hello'] = 'shit';
    a['foo'] = 'bar';
    
    
  • Node 的异步回调函数的第一个参数应该是错误指示

    function cb(err, data , ...) {...}
    
    
  • 类继承写法,尽管有各种方式来实现继承,但最为推荐的是Node 的标准写法

    function Socket(options) {
      ...
      stream.Stream.call(this);
      ...
    }
    
    util.inherits(Socket, stream.Stream);
    
    
  • 如果你在模块中 exports 一个类,对于此类的私有成员变量,建议加上 "_" 前缀以示区分

  • 变量声明时,应该每行声明一个,不应该都写在一行(尽管这被JSLint 所推荐)。

    Right:

    var assert = require('assert');
    var fork = require('child_process').fork;
    var net = require('net');
    var EventEmitter = require('events').EventEmitter;
    
    

    Wrong:( Node 源代码已经将此方式全部修正)

    var assert = require('assert')
      , fork = require('child_process').fork
      , net = require('net')
      , EventEmitter = require('events').EventEmitter;
    
    
  • 注释规范,采用 Google 的js 规范

    Right :

    /**
     * Queries a Baz for items.
     * @param {number} groupNum Subgroup id to query.
     * @param {string|number|null} term An itemName,
     *     or itemId, or null to search everything.
     */
    goog.Baz.prototype.query = function(groupNum, term) {
      // ...
    };
    
    

    更多案例请参看以上链接

  • 多参考、模仿 Node 源码的编程风格 ^_^

### Node.js 项目中的分包编码规范最佳实践 #### 1. 文件结构清晰化 为了提高项目的可维护性和扩展性,建议按照功能模块划分目录。每个模块应有自己的入口文件和必要的子模块。例如: ```plaintext project-root/ ├── lib/ # 主要逻辑代码 │ ├── moduleA/ │ │ └── index.js # 模块 A 的主要实现 │ ├── moduleB/ │ │ └── index.js # 模块 B 的主要实现 └── ... ``` 这种布局有助于团队成员快速定位到特定的功能区域[^1]。 #### 2. 使用 Webpack 实现代码分割 (Code Splitting) 通过配置 `optimization.splitChunks` 参数来启用动态导入(Dynamic Imports),可以有效减少初始加载时间并提升用户体验。对于大型应用而言,合理地拆分子模块能够显著降低单个 JavaScript 文件大小,从而加快页面响应速度。 ```javascript // webpack.config.js 配置示例 module.exports = { // ...其他配置项... optimization: { splitChunks: { chunks: 'all', minSize: 20000, maxSize: 0, cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name(module, chunks, cacheGroupKey) { const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]; return `${cacheGroupKey}.${packageName.replace('@', '')}`; }, }, }, }, }, }; ``` #### 3. 启用 Gzip 或者 Brotli 压缩 确保服务器端已经开启了适当的内容编码方式,比如 Gzip 或者更高效的 Brotli 算法。这一步骤可以在不增加太多复杂度的情况下大幅减小实际传输的数据量。检查 Nginx 设置时应注意确认是否存在如下类似的指令: ```nginx gzip on; gzip_types text/plain application/javascript; brotli on; brotli_types text/plain application/javascript; ``` #### 4. 维护良好的文档习惯 编写详细的 README.md 和 CONTRIBUTING.md 文档可以帮助新加入的开发人员更快地上手工作。同时,在提交 Pull Request 之前务必附带完整的变更描述以及测试报告,以便于后续审查过程顺利进行[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值