Как вы делитесь константами в модулях NodeJS? - PullRequest
197 голосов
/ 21 декабря 2011

В настоящее время я делаю это:

foo.js

const FOO = 5;

module.exports = {
    FOO: FOO
};

И используя его в bar.js:

var foo = require('foo');
foo.FOO; // 5

Есть ли лучший способ сделать это? Неловко объявлять константу в объекте экспорта.

Ответы [ 13 ]

1 голос
/ 01 сентября 2015

Я закончил тем, что экспортировал замороженный объект с анонимными функциями получения, а не с самими константами.Это снижает риск появления неприятных ошибок из-за простой опечатки с именем const, так как в случае опечатки будет выдана ошибка времени выполнения.Вот полный пример, который также использует символы ES6 для констант, обеспечивая уникальность, и функции стрелок ES6.Был бы признателен за обратную связь, если что-то в этом подходе кажется проблематичным.

'use strict';
const DIRECTORY = Symbol('the directory of all sheets');
const SHEET = Symbol('an individual sheet');
const COMPOSER = Symbol('the sheet composer');

module.exports = Object.freeze({
  getDirectory: () => DIRECTORY,
  getSheet: () => SHEET,
  getComposer: () => COMPOSER
});
0 голосов
/ 15 августа 2017

Я не думаю, что это хорошая практика для вторжения в пространство GLOBAL из модулей, но в сценариях, где это может быть строго необходимо для его реализации:

Object.defineProperty(global,'MYCONSTANT',{value:'foo',writable:false,configurable:false});

Это должно рассматриваться каквлияние этого ресурса.Без правильного именования этих констант риск ПЕРЕЗАПИСИ уже определенных глобальных переменных является чем-то реальным.

0 голосов
/ 22 июня 2016

Я рекомендую сделать это с webpack (предполагается, что вы используете webpack).

Определение констант так же просто, как настройка файла конфигурации webpack:

var webpack = require('webpack');
module.exports = {
    plugins: [
        new webpack.DefinePlugin({
            'APP_ENV': '"dev"',
            'process.env': {
                'NODE_ENV': '"development"'
            }
        })
    ],    
};

Таким образом, вы определяете их вне вашего источника, и они будут доступны во всех ваших файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...