Javascript 使用Node.js模块导入在命名约定和语义之间进行选择

Javascript 使用Node.js模块导入在命名约定和语义之间进行选择,javascript,node.js,import,module,naming-conventions,Javascript,Node.js,Import,Module,Naming Conventions,在Node.js中导入模块时,在导入类时使用大写字母,在导入其他任何内容时使用驼峰大小写是非常常见的(并且极大地帮助了可读性): let Transform = require('stream').Transform; let util = require('util'); let fs = require('fs'); 然而,导入的模块实际上应该是常量,因为允许来自导入模块的函数或类的值发生变化是没有意义的: const Transform = require('stream').Trans

在Node.js中导入模块时,在导入类时使用大写字母,在导入其他任何内容时使用驼峰大小写是非常常见的(并且极大地帮助了可读性):

let Transform = require('stream').Transform;
let util = require('util');
let fs = require('fs');
然而,导入的模块实际上应该是常量,因为允许来自导入模块的函数或类的值发生变化是没有意义的:

const Transform = require('stream').Transform;
const util = require('util');
const fs = require('fs');
但命名约定规定常量应始终使用所有大写和下划线:

const PI = 3.14159265358979;
const AVOGADRO_NUMBER = 6.02214086e23;
因此,这里存在一个冲突:在命名导入的模块时使用所有的大写和下划线在语义上通常是混乱的,但不将导入的模块、类或函数设置为常量在语义上是不合逻辑的

因此,任何导入的模块都应该使用所有的大写和下划线,从而牺牲一些可读性和关于导入模块填充哪个角色(函数/变量或类)的知识:

const RIEMANN_ZETA = require('riemann-zeta');
let nonTrivialZero = RIEMANN_ZETA(s);
或导入的模块应根据角色使用camelCase或大写,以牺牲常量状态和符号之间的一致性为代价:

const riemannZeta = require('riemann-zeta');
let nonTrivialZero = riemannZeta(s);
或导入的模块应作为非常量导入,保持所有命名约定,但在导入后牺牲模块的逻辑使用,使其不可变:

let riemannZeta = require('riemann-zeta');
let nonTrivialZero = riemannZeta(s);

哪一个最有意义?

这是一个主观的问题,所以它可能不是这个问题的正确位置,但我会告诉你我的看法。我使用大写字母表示文字值,如
PI=3.1415
DEFAULT\u TAB='search'
,以避免出现幻数和字符串。对于所有其他不可变的变量,我使用
camelCase
,就像使用任何其他变量一样。(编辑:对于我使用的类,
PascalCase
)这感觉像是约定(对象和类分别使用camelCase和PascalCase)和逻辑(常量文本使用大写)的正确组合。