2015-04-05 12 views
8

Ho 2 livelli di file package.json.Come eseguire l'esecuzione di npm <script> delegato a child package.json?

Esempio è qui:

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

La ragione è che il livello superiore è un applicazione Rails, e sto mettendo tutti gli strumenti dei nodi sotto un client directory chiamata, con il proprio package.json file. Il file di livello superiore package.json rappresenta un vantaggio e un hook per il nodo buildpack per eseguire lo script .

Ho un esempio di inoltro del comando gulp. Qualsiasi modo per inoltrare genericamente qualcosa che non è stato trovato dal livello superiore package.json a quello secondario?

Livello superiore 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" 
} 

sottodirectory 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" 
    } 
} 

risposta

0

si potrebbe scrivere un file batch in cui si inserisce il gulp -command. Quindi devi controllare lo stato degli errori. Questo potrebbe assomigliare a questo:

@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; 

Poi basta chiamare lo script nella vostra package.json come questo:

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

ha fatto lo stesso il mio progetto .. ..

MODIFICA: per tutti gli script .... è possibile creare un batchfile che accetta il nome dello script come param eter. lo script fa lo stesso come sopra, ma dovrebbe funzionare per ogni comando.

NOTA: È necessario utilizzare qualcosa come start path/to/batchfile.bat gulp anziché npm run gulp. Gestione degli errori non funziona per errori npm!

Questa potrebbe essere la seguente:

@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

È possibile utilizzare npm run script per semplificare l'operazione (vedi npm-scripts). Nella genitore package.json:

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

Quando il cliente ha un package.json con il comando npm run build per la costruzione del codice lato client.

Quindi invocare npm run client-build come parte del comando shell di altre attività. Per esempio:

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

Essa può contribuire a rompere il progetto figlio fuori in un modulo separato con un proprio repository git e la costruzione attraverso uno script postinstall.In tal caso, quando si esegue npm install nel progetto principale, il bambino avrà la possibilità di costruirsi.

Problemi correlati