Per correggere eventuali errori in librerie con vulnerabilità o errori non pathcabili con update ( perché già all'ultima versione o perché la nuova versione non è retrocompatibili ) si può usare uno script di grunt che automatizza la correzione: ad esempio la libreria bootstrap-select ( @todo cercare un sostituto ) nella sua ultima versione contiene un errore di sintassi scss perché i calcoli vanno effettuati all’interno del costrutto calc()
$amnt: $amnt / 100; // convert to percentage if int
Per poter correggere possiamo usare uno script di grunt che si chiama grunt-replace
npm install grunt-replace
Successivamente dobbiamo creare la procedura all’interno del file Gruntfile.js che va a prendere il file con l’errore e sostituisce la stringa
replace: {
dist: {
options: {
patterns: [
{
match: /\$amnt: \$amnt \/ 100;/g, // Trova la stringa da sostituire
replace: "$amnt: calc($amnt / 100)" // Sostituisci con la nuova stringa
}
],
usePrefix: false // Non usare il prefisso ~ per le URL
},
files: [
{
expand: true,
src: ['dist/vendor/bootstrap-select/sass/bootstrap-select.scss'],
dest: './' // Sovrascrivi i file originali
}
]
}
},
Lo script va caricato
grunt.loadNpmTasks('grunt-replace');
e registrato nel posto corretto ( in questo caso ad esempio il gruppo scss viene chiamato dopo il copy per cui il file è già nella dist )
grunt.registerTask('scss', [
'replace',
'sass',
'postcss'
]);
Un esempio che corregge anche il problema del math non disponibile e delle percentuali su abs:
replace: {
dist: {
options: {
patterns: [
{
match: /\$amnt: \$amnt \/ 100;/g,
replace: "$amnt: calc($amnt / 100);"
},
{
match: /abs\(\$dividend\);/g,
replace: "abs($dividend);" // Usa `abs()` al posto di `math.abs()`
},
{
match: /abs\((\d+%)\);/g,
replace: "abs(#{$1});" // Usa `abs(#{$1})` per preservare le percentuali
}
],
usePrefix: false // Non usare il prefisso ~ per le URL
},
files: [
{
expand: true,
src: [
'src/scss/{,**/}*.scss',
'dist/vendor/{,**/}*.scss',
],
dest: './' // Sovrascrivi i file originali
}
]
}
},