2015-04-05 9 views
8

Mam 2 poziomy plików package.json.Jak mieć npm uruchomić <script> delegować do pakietu dziecko.json?

Przykład jest tutaj:

https://github.com/justin808/react-webpack-rails-tutorial

Powodem jest to, że górny poziom jest Szyny App i Kładę wszystkie narzędzia pod węzeł katalogu o nazwie klienta, z własnym package.json pliku. Plik najwyższego poziomu package.json jest udogodnieniem, a także hakiem dla buildpack węzła do uruchamiania skryptu npm install.

Mam przykład przekazywania polecenia gulp. Jakikolwiek sposób generalnie przekazywać wszystko, co nie zostało znalezione na najwyższym poziomie, package.json na dziecko?

Najwyższy poziom package.json.

{ 
    "name": "react-webpack-rails-tutorial", 
    "version": "1.1.1", 
    "description": "Code from the React Webpack tutorial.", 
    "main": "server.js", 
    "engines": { 
    "node": "0.10.32" 
    }, 
    "scripts": { 
    "postinstall": "cd ./client && npm install", 
    "gulp": "cd ./client && npm run gulp" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "https://github.com/justin808/react-webpack-rails-tutorial.git" 
    }, 
    "keywords": [ 
    "react", 
    "tutorial", 
    "comment", 
    "example" 
    ], 
    "author": "justin808", 
    "license": "MIT", 
    "bugs": { 
    "url": "https://github.com/justin808/react-webpack-rails-tutorial/issues" 
    }, 
    "homepage": "https://github.com/justin808/react-webpack-rails-tutorial" 
} 

podkatalogów package.json

{ 
    "name": "react-webpack-rails-tutorial", 
    "version": "1.1.0", 
    "description": "Code from the React Webpack tutorial.", 
    "main": "server.js", 
    "engines": { 
    "node": "0.10.32" 
    }, 
    "repository": { 
    "type": "git", 
    "url": "https://github.com/justin808/react-webpack-rails-tutorial.git" 
    }, 
    "keywords": [ 
    "react", 
    "tutorial", 
    "comment", 
    "example" 
    ], 
    "author": "justin808", 
    "license": "MIT", 
    "bugs": { 
    "url": "https://github.com/justin808/react-webpack-rails-tutorial/issues" 
    }, 
    "homepage": "https://github.com/justin808/react-webpack-rails-tutorial", 
    "dependencies": { 
    "babel-core": "^5.0.8", 
    "babel-loader": "^5.0.0", 
    "body-parser": "^1.12.2", 
    "es5-shim": "^4.1.0", 
    "imports-loader": "^0.6.3", 
    "jquery": "^2.1.3", 
    "loader-utils": "^0.2.6", 
    "marked": "^0.3.3", 
    "react": "^0.13.1", 
    "react-bootstrap": "^0.20.1", 
    "sleep": "^2.0.0", 
    "webpack": "^1.7.3" 
    }, 
    "devDependencies": { 
    "babel-eslint": "^2.0.2", 
    "bootstrap-sass": "^3.3.4", 
    "bootstrap-sass-loader": "^1.0.3", 
    "css-loader": "^0.9.1", 
    "eslint": "^0.18.0", 
    "eslint-plugin-react": "^2.0.2", 
    "expose-loader": "^0.6.0", 
    "express": "^4.12.3", 
    "file-loader": "^0.8.1", 
    "gulp": "^3.8.11", 
    "gulp-eslint": "^0.8.0", 
    "node-sass": "^2.1.1", 
    "react-hot-loader": "^1.2.4", 
    "sass-loader": "^0.6.0", 
    "style-loader": "^0.9.0", 
    "url-loader": "^0.5.5", 
    "webpack-dev-server": "^1.8.0" 
    }, 
    "scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start": "node server.js", 
    "gulp": "gulp" 
    } 
} 

Odpowiedz

0

można napisać plik wsadowy, gdzie można umieścić gulp -polecenie. Następnie musisz sprawdzić errorstate. To mogłoby wyglądać tak:

@echo off 

:RUN_GULP 
echo Running Gulp... 
gulp 
goto END 

:END 
if %ERRORLEVEL% neq 0 goto PROCESS_ERROR 
exit 

:PROCESS_ERROR 
cd ./client 
gulp 
exit; 

Wtedy po prostu trzeba wywołać skrypt w package.json tak:

"gulp": "call ./path/to/batfile.bat" 

zrobił to samo na moim projekcie .. ..

EDYCJA: Dla wszystkich skryptów .... można utworzyć jeden plik wsadowy, który przyjmuje nazwę skryptu jako parametr eterem. skrypt działa tak samo jak powyżej, ale powinien działać dla każdego polecenia.

UWAGA: Musisz użyć czegoś takiego jak start path/to/batchfile.bat gulp zamiast npm run gulp. Obsługa błędów nie działa w przypadku błędów npm!

Mogłoby to wyglądać tak:

@echo off 

:: Check if script is defined 
set _script=%1 
if "%_script%"=="" goto NO_SCRIPT_DEFINED 

:START_APP 
npm run %_script% 
goto END 

:NO_SCRIPT_DEFINED 
echo ERROR: script was not defined 
pause 
exit 

:END 
if %ERRORLEVEL% neq 0 goto NO_PARENT_SCRIPT 
exit 

:NO_PARENT_SCRIPT 
echo searching in ./client ... 
cd ./client 
npm run %_script% 
exit 
7

Można użyć npm run skryptów do uproszczenia transakcji (patrz npm-scripts). W dominującej package.json:

"scripts": { 
     ... 
    "client-build": "cd client && npm run build" 
    } 

Jeżeli klient ma package.json z poleceniem npm run build budowania kodu po stronie klienta.

Następnie wywołaj npm run client-build jako część polecenia powłoki innych zadań. Na przykład:

"scripts": { 
    "start": "npm run client-build && gulp some-task", 
    ... 
    } 

To może pomóc przełamać projekt dziecko się do osobnego modułu z własnej repo git i budowanie go przez skrypt postinstall.W takim przypadku, po uruchomieniu npm install w projekcie nadrzędnym, dziecko będzie miało szansę na zbudowanie się.

Powiązane problemy