node.js和浏览器代码重用:将常量导入模块

Pau*_*aul 4 javascript node.js

我在JavaScript中有一些常量,我想在几个文件中重用,同时保存键入,减少错误输入的错误,保持运行时性能高,并且对node.js服务器脚本或客户端Web浏览器脚本有用.

例:

const cAPPLE = 17;
const cPEAR = 23;
const cGRAPE  = 38;
...(some later js file)...
for...if (deliciousness[i][cAPPLE] > 45) ...
Run Code Online (Sandbox Code Playgroud)

以下是我可以做的一些事情:

  1. 将const列表复制/粘贴到使用的每个文件的顶部.哦,哎呀.我宁愿不.这与保持常量名称简洁和简单兼容.如果列表中的任何内容发生变化,它会违反DRY并引发各种可怕的错误.

  2. 常量列表---> const.js

在浏览器上,这是FINE ...脚本被html文件输入并且工作正常.

但是在node.js上,require机制改变了常量名称,干扰了代码重用,需要更多的输入,因为需要工作....

AFAIK对于没有使用全局变量的任何const.js,这在设计中在node.js中不起作用:

require('./const.js');
for...if...deliciousness[i][cAPPLE] > 45 ...;  
Run Code Online (Sandbox Code Playgroud)

这是node.js的方式:

(... const.js ....)
exports.APPLE = 17;
(... dependency.js ... )
var C = require('./const.js');
for...if...deliciousness[i][C.APPLE] > 45..... 
Run Code Online (Sandbox Code Playgroud)

所以我要么必须有两个常量文件,一个用于node.js需要,一个用于浏览器,或者我必须使用列表中的其他内容...

3使得要导入的对象的常量属性...仍然需要两个文件...因为node.js导入方式与浏览器不匹配.也使名称更长,可能需要更多的时间来进行查找,正如我所暗示的那样,可能会出现在循环中.

4外部常量列表,内部适配器....读取外部常量,无论如何存储,都放入每个文件的内部结构中,而不是直接尝试使用外部列表

const.js
exports.cAPPLE = 17

browser.js
const cAPPLE = exports.cAPPLE;
...code requiring cAPPLE...

node.js
CONST = require(./const.js)
const cAPPLE = CONST.cAPPLE;
...code requiring cAPPLE...
Run Code Online (Sandbox Code Playgroud)

这需要每个文件一次性命中来编写代码以提取常量,因此会在稍微进化的剪切和粘贴中反复复制一堆代码.

它确实允许需要cAPPLE的代码继续使用短命名常量

有没有其他解决方案,也许是一个更有经验的JavaScripter可能知道,我可能会忽视?

小智 5

module.exports = Object.create({},{
        "foo": { value:"bar", writable:false, enumerable:true }
});
Run Code Online (Sandbox Code Playgroud)

属性不可写.与"const"不同,在严格模式下工作.