J'aimerais changer ce Makefile:
Shell := /bin/bash
PATH := node_modules/.bin:$(PATH)
boot:
@supervisor \
--harmony \
--watch etc,lib \
--extensions js,json \
--no-restart-on error \
lib
test:
NODE_ENV=test mocha \
--harmony \
--reporter spec \
test
clean:
@rm -rf node_modules
.PHONY: test clean
à:
Shell := /bin/bash
PATH := node_modules/.bin:$(PATH)
boot:
@supervisor \
--harmony \
--watch etc,lib \
--extensions js,json \
--no-restart-on error \
lib
test: NODE_ENV=test
test:
mocha \
--harmony \
--reporter spec \
test
clean:
@rm -rf node_modules
.PHONY: test clean
Malheureusement, le second ne fonctionne pas (le processus de noeud fonctionne toujours avec la valeur par défaut NODE_ENV
.
Qu'est-ce que j'ai raté?
Les variables Make ne sont pas exportées dans l'environnement de processus make invokes ... par défaut. Cependant, vous pouvez utiliser make export
pour les forcer à le faire. Changement:
test: NODE_ENV = test
pour ça:
test: export NODE_ENV = test
(en supposant que vous avez une version suffisamment moderne de GNU make).
Comme MadScientist a souligné , vous pouvez exporter des variables individuelles avec:
export MY_VAR = foo # Available for all targets
Ou exportez des variables pour une cible spécifique ( variables spécifiques à une cible ):
my-target: export MY_VAR_1 = foo
my-target: export MY_VAR_2 = bar
my-target: export MY_VAR_3 = baz
my-target: dependency_1 dependency_2
echo do something
Vous pouvez également spécifier la cible .EXPORT_ALL_VARIABLES
pour — vous l'avez deviné! —EXPORTER TOUTES LES CHOSES !!!:
.EXPORT_ALL_VARIABLES:
MY_VAR_1 = foo
MY_VAR_2 = bar
MY_VAR_3 = baz
test:
@echo $$MY_VAR_1 $$MY_VAR_2 $$MY_VAR_3
Je n'avais besoin que des variables d'environnement localement pour appeler ma commande de test. Voici un exemple montrant la configuration de plusieurs vars d'environnement dans un shell bash et échappant au signe dollar dans make
.
Shell := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/