Javascript node.js和浏览器代码重用:将常量导入模块
我在JavaScript中有一些常量,我希望在保存键入时在几个文件中重用这些常量,减少错误键入造成的错误,保持高运行时性能,并且对node.js服务器脚本或客户端web浏览器脚本都很有用 例如:Javascript node.js和浏览器代码重用:将常量导入模块,javascript,node.js,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) ... 以下是我可以做的一些事情: 将常量列表
const cAPPLE = 17;
const cPEAR = 23;
const cGRAPE = 38;
...(some later js file)...
for...if (deliciousness[i][cAPPLE] > 45) ...
以下是我可以做的一些事情:
require('./const.js');
for...if...deliciousness[i][cAPPLE] > 45 ...;
这是node.js的方式:
(... const.js ....)
exports.APPLE = 17;
(... dependency.js ... )
var C = require('./const.js');
for...if...deliciousness[i][C.APPLE] > 45.....
所以我要么要有两个常量文件,一个用于node.js requires,另一个用于浏览器,要么我要用列表中更靠后的东西
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...
这需要对每个文件执行一次命中操作来编写代码,以便将常量提取出来,因此将以稍微进化的剪切粘贴方式反复复制一堆代码
它确实允许需要cAPPLE的代码在使用短命名常量的基础上继续工作
有没有其他我可能忽略的解决方案,也许更有经验的JavaScripter会知道吗?我只想让它们成为全局键:
...(module consts.js)...
global.APPLE = 17;
global.PEAR = 23;
global.GRAPE = 38;
...(some later js file)...
var C = require('./const.js');
for (var i = 0; i < something.length; i++) {
if (deliciousness[i][global.APPLE] > 45) { blah(); }
}
…(模块常量.js)。。。
global.APPLE=17;
global.PEAR=23;
global.GRAPE=38;
…(稍后的一些js文件)。。。
var C=require('./const.js');
for(var i=0;i45{blah();}
}
它们不会是强制常量,但如果您坚持常量的ALL_CAPS命名约定,显然它们不应该被更改。并且,如果您将同一个文件包括在内并按如下方式使用,则应该能够在浏览器中重复使用该文件:
var global = {};
<script src="const.js"></script>
<script>
if (someVar > global.GRAPE) { doStuff(); }
</script>
var global={};
如果(someVar>global.GRAPE){doStuff();}
属性不可写。与“常量”不同,它在严格模式下工作。您可以使用object.freeze使对象不可写入
var configs={
ENVIRONMENT:"development",
BUILDPATH:"./buildFiles/",
}
Object.freeze(configs);
module.exports=configs;
你可以把它当作常数
var config=require('config');
// config.BUILDPATH will act as constant and will be not writable.
大多数情况下,我要处理的是列数。。。不想移动到散列或对象。这看起来很有用。谢谢
var config=require('config');
// config.BUILDPATH will act as constant and will be not writable.