Buduję pakiet, który używa zewnętrznego narzędzia poleceń o nazwie plop js. W moim package.json Chcę dodać binarny, że odniesienia do pliku index.js.

  "scripts":{
     "plop": "plop"
  },
  "bin": {
    "my-command": "index.js"
  },

Istnieje sposób na uruchomienie skryptu plop z mojego pakietu w pliku index.js?

Moim celem jest uruchomienie tego skryptu, gdy użytkownik pisze my-command w terminalu. (i użyj lokalnego plop, chcę, aby był przezroczysty dla konsumenta)

1
undefined 27 czerwiec 2017, 18:01

4 odpowiedzi

Najlepsza odpowiedź

Właśnie mam ten sam problem i znalazłem tę pracę:

#!/usr/bin/env node
process.argv.push('--plopfile', __dirname + '/plopfile.js');
require('plop');
0
ofir fridman 19 wrzesień 2018, 07:03

NPM's scripts są (z wyjątkiem start ) zawsze bieganie jak npm run plop. Zwykle definiujesz polecenie startu, które normalnie działa jak npm start i jest znany przez wszystkich. Możesz także polecenia łańcuchowe (jeśli chcesz uruchomić wiele).

Zakładając, że chcesz uruchomić plop jako pierwsze polecenie: Jeśli wpiszesz npm start, będzie wykonywać plop , a następnie Węzeł index.js.Js

    "scripts":{
        "start": "plop && node index.js"
    },

Jeśli chcesz uruchomić coś po prostu ** raz * po zainstalowaniu NPM, umieść go w "postinstall" : "plop"

-1
Markus 27 czerwiec 2017, 15:09

Ponieważ "plop": "^ 2.7.3", Znalazłem powyższe nie działać więcej i z https://github.com/propjs/plop/ Problemy / 78 Widziałem nowe rozwiązanie

#!/usr/bin/env node
const args = process.argv.slice(2);
const {Plop, run} = require('plop');
const argv = require('minimist')(args);

Plop.launch({
    cwd: argv.cwd,
    configPath: argv.plopfile, // changed to `${process.cwd()}/plopfile.js` in my case
    require: argv.require,
    completion: argv.completion
}, run);

0
ofir fridman 30 lipiec 2020, 11:48

Powodem, dla którego nie możesz bezpośrednio require i użyj plop, jest to, że jest to CLI. Jako CLI, nie eksportuje niczego, ale używa process.argv jako jego wejście. Więc wszystko, co naprawdę musisz zrobić, to zmienić process.argv w skrypcie przed require ing plop.

process.argv.push('--version');
require('plop');

Następnie można użyć wbudowanego argumentu --plopfile, aby wskazać określony plik, który chcesz uruchomić.

1
amwmedia 28 czerwiec 2017, 12:06