определение макроса в JavaScript - PullRequest
11 голосов
/ 12 мая 2011

Есть ли способ, которым я могу определить макрос, подобный макросам C / C ++ в Javascript?

Я хочу использовать это для операторов отладки: что-то вроде

#ifdef TEST__
#define MYDEBUG(##x) debug(__FILE__,x)
#else
#define debug
#endif

Не обязательно похоже, но я хочу добиться этой функциональности.Есть ли способ, которым я могу это сделать?

Спасибо

Ответы [ 6 ]

18 голосов
/ 01 марта 2012
var de = false; // true when debugging
function bug( msg ){ ... display msg ... }

Использование:

de&&bug( "hello world")

Когда «de» равно false (режим производства), накладные расходы минимальны.

1 голос
/ 12 мая 2011

Нет способа сделать это в JavaScript.У вас может быть глобальная переменная, такая как

var isDebugging = false;

Затем при написании кода просто проверьте, является ли переменная истинной.Очевидно, что это создаст некоторые нежелательные издержки с размером файла и очень небольшую потерю производительности.Но кроме указания собственного формата и запуска кода через инструмент для удаления кода отладки перед загрузкой.

Что-то вроде

var foo = function() {
   <!-- document.write( "blah" ); -->
};

Для сборки выпуска вы удалили бы всевнутри тегов включительно.А для отладочной сборки вы можете просто удалить теги, но сохранить код.Нечто подобное можно выполнить с помощью сценария сборки Ant или аналогичного.

0 голосов
/ 25 апреля 2016

С Builder - https://github.com/electricimp/Builder, вы можете сделать так:

@macro MYDEBUG(x)
  debug(@{__FILE__}, @{x});
@end

...

@{MYDEBUG(100500)}

Также поддерживает включения непосредственно из GitHub.

0 голосов
/ 12 мая 2015

Для тех, кто все еще заинтересован:

https://github.com/dcodeIO/Preprocessor.js

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

Примеры:

// #ifdef FULL
console.log("Including extension");
// #include "path/to/extension.js"
// #else
console.log("Not including extension");
// #endif

// #if 1==2
console.log("1==2");
// #elif 2==2
console.log("2==2");
// #endif
0 голосов
/ 12 мая 2011

Хотя верно то, что, как сказал @sapht, время компиляции отсутствует, вы можете предварительно обработать ваши файлы, если хотите.Обычно я использую ant-скрипт для объединения множества файлов Javascript и добавления информации о сборке.

В поиске Google я вижу, что есть препроцессор Javascript, который может вас заинтересовать: http://www.bramstein.com/projects/preprocess/

0 голосов
/ 12 мая 2011

В Javascript нет макросов, поскольку нет компилятора. Вы можете использовать console.log и написать регулярное выражение для удаления этих операторов при развертывании.

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