Se sto sviluppando il pacchetto NPM foo
e voglio che sia installato a livello mondiale come un'applicazione a riga di comando, posso farlo semplicemente aggiungendo alla mia package.json:Perché l'esecuzione del mio pacchetto collegato a livello globale npm apre semplicemente il file bin?
"bin": {
"foo": "./bin/foo.js"
}
Qualcuno che installa il mio il pacchetto globalmente via npm avrà il file batch appropriato e lo script di shell aggiunto alla loro directory globale prefisso npm. Tuttavia, supponiamo di voler avviare il mio pacchetto dalla shell (o, nel caso di Windows, il prompt dei comandi). Potrei farlo creando uno script batch file/shell da qualche parte in una delle mie directory PATH che esegue semplicemente direttamente il mio pacchetto, ad es. @node C:\my\package\directory\bin\foo %*
.
Questa è una soluzione abbastanza semplice ed evidente, ma ho ritenuto che npm link
fosse più adatto, in quanto si sente meno hacky ed è teoricamente progettato per fare esattamente questa cosa. Corro npm link
nella mia directory dei pacchetti, quindi eseguo il test eseguendo foo
dalla riga di comando. Invece di eseguire il mio script, lo foo.js
viene effettivamente aperto nel mio editor predefinito. Indagare nella directory di prefisso, si scopre che il file foo.cmd
(il contenuto dello script foo
shell sono simili), che NPM creato contiene questo:
"%~dp0\node_modules\foo\bin\foo.js" %*
confrontare con il file batch creato da npm install -g
:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\npm\bin\npm-cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\npm\bin\npm-cli.js" %*
)
Perché lo npm link
produce file di script che lanciano un file bin del pacchetto anziché avviare il nodo con il file bin come argomento? Come posso risolvere questo comportamento?
qualsiasi soluzione per questo? – kingPuppy