Es tut mir leid , eine separate Antwort für lediglich eine Erweiterung der Antwort von @ NateFerrero zu schreiben , aber ich halte es auch nicht für angebracht, seine Antwort zu bearbeiten. Bitte stimmen Sie @NateFerrero zu, wenn diese Antwort für Sie nützlich war.
tl; dr - Für diejenigen, die Blockkommentare in ihrem Heredoc verwenden möchten ...
Ich brauchte hauptsächlich Javascript-Heredocs, um einen CSS-Block zu speichern, z
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
*/
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
Wie Sie jedoch sehen können, kommentiere ich gerne mein CSS, und leider (wie durch die Syntaxhervorhebung angedeutet) beendet der erste */
den Gesamtkommentar und bricht den Heredoc.
Für diesen speziellen Zweck (CSS) bestand meine Problemumgehung darin, hinzuzufügen
.replace(/(\/\*[\s\S]*?\*) \//g, '$1/')
an die Kette in @ NateFerrero's heredoc
; in vollständiger Form:
function heredoc (f) {
return f.toString().match(/\/\*\s*([\s\S]*?)\s*\*\//m)[1].replace(/(\/\*[\s\S]*?\*) \//g, '$1/');
};
und verwenden Sie es, indem Sie ein Leerzeichen zwischen *
und /
für "innere" Blockkommentare einfügen, wie folgt:
var css = heredoc(function() {/*
/**
* Nuke rounded corners.
* /
body div {
border-top-left-radius: 0 !important;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
border-bottom-left-radius: 0 !important;
}
*/});
Der replace
findet /* ... * /
und entfernt einfach den Raum, um zu machen /* ... */
, wodurch der Heredoc erhalten bleibt, bis er aufgerufen wird.
Sie können die Kommentare natürlich ganz mit entfernen
.replace(/\/\*[\s\S]*?\* \//g, '')
Sie können //
Kommentare auch unterstützen , wenn Sie sie der Kette hinzufügen:
.replace(/^\s*\/\/.*$/mg, '')
Sie können aber auch etwas anderes als den einzigen Raum zwischen tun *
und /
wie ein -
:
/**
* Nuke rounded corners.
*-/
Wenn Sie den regulären Ausdruck nur entsprechend aktualisieren:
.replace(/(\/\*[\s\S]*?\*)-\//g, '$1/')
^
Oder möchten Sie eine beliebige Anzahl von Leerzeichen anstelle eines einzelnen Leerzeichens?
.replace(/(\/\*[\s\S]*?\*)\s+\//g, '$1/')
^^^