Prevenzione delle installazioni globali di un pacchetto NPM

Dispongo di una libreria e desidero incoraggiare / forzare gli utenti a utilizzare solo la versione installata localmente. Potrei farlo nel modo più duro o facile.

Il modo più semplice sarebbe se NPM avesse un meccanismo per impedire l’uso dello switch --global con il comando npm install, per qualsiasi libreria.

Il modo più difficile sarebbe quello di aggiungere codice nel pacchetto NPM che è stato restituito in anticipo se il codice ha determinato che è stato installato a livello globale e non installato localmente.

Qualcuno sa se è ansible impedire installazioni globali di un pacchetto NPM? Quale potrebbe essere il modo più user friendly per avvicinarsi a questo?

Il modo migliore per impedire agli utenti di installare il modulo a livello globale sarebbe quello di descrivere le tue preferenze nella documentazione .

Non c’è nulla che tu possa fare per costringere i tuoi utenti a non installarlo mai a livello globale se possono installarlo localmente. Saranno sempre in grado di spostare manualmente i file se lo desiderano.

Nella comunità di npm l’assunto è che l’ utente abbia il controllo sui moduli che utilizza, non il contrario . Costringere le persone a usare il tuo modulo in un certo modo le renderà infelici.

Quindi l’unica buona risposta alla tua domanda è di documentare il modo in cui il tuo codice dovrebbe essere usato. Puoi chiedere loro di usare il tuo modulo in un certo modo – ma sono loro che possono scegliere di ascoltarti o meno. È ansible affermare che l’utilizzo del modulo installato a livello globale non è supportato, imprudente, scoraggiato, pericoloso, ma non sarà ansible forzare gli utenti a utilizzare il modulo come si desidera, e questa è una buona cosa.

Ora, per alcune cattive risposte , puoi sempre verificare se il genitore della root directory del tuo modulo è chiamato node_modules o no e fallire se non lo è, ma sono sicuro che può causare qualche problema se qualcuno dovesse installare il tuo modulo localmente come vuoi ma in una directory diversa. Puoi vedere se il tuo modulo viene eseguito da uno dei percorsi predefiniti che il nodo utilizza per cercare i moduli, ma quei percorsi non sono sempre gli stessi, e dovresti prendere in considerazione anche la variabile d’ambiente NODE_PATH .

Puoi fare alcuni trucchi del genere ma possono solo infastidire gli utenti che sanno cosa stanno facendo perché dovranno cambiare il codice sorgente del tuo modulo per fare quello che vogliono, e saranno sempre in grado di farlo, non importa quanto Difficile cerchi di rendere più difficile la loro vita.

In sintesi, la mia raccomandazione sarebbe quella di documentare bene il tuo modulo e rispettare i tuoi utenti e le loro esigenze e fidarti di loro per sapere cosa stanno facendo.

Aggiornare

Per un esempio funzionante di una funzione di Bash che impedisce l’installazione di un determinato modulo su npm , vedere questa risposta – sezione Esempio di esempio di prevenzione dell’installazione globale .