我想更改这个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
不幸的是,第二个不起作用(节点进程仍以默认NODE_ENV
运行。
我错过了什么?
答案 0 :(得分:123)
默认情况下,Make变量不会导出到进程调用环境中。但是,您可以使用make export
强制他们这样做。变化:
test: NODE_ENV = test
到此:
test: export NODE_ENV = test
(假设你有一个足够现代的GNU make版本)。
答案 1 :(得分:34)
作为MadScientist pointed out,您可以使用以下内容导出单个变量:
export MY_VAR = foo
你也可以指定.EXPORT_ALL_VARIABLES
目标 - 你猜对了! - 出口所有事情!!!:
.EXPORT_ALL_VARIABLES:
MY_VAR = foo
test:
@echo $$MY_VAR
答案 2 :(得分:12)
我只需要本地环境变量来调用我的测试命令,这里是一个在bash shell中设置多个环境变量并在make
中转义美元符号的示例。
SHELL := /bin/bash
.PHONY: test tests
test tests:
PATH=./node_modules/.bin/:$$PATH \
JSCOVERAGE=1 \
nodeunit tests/
答案 3 :(得分:3)
我将重新编写原始目标测试,注意需要在启动子应用程序的同一子过程中定义所需的变量:
test:
( NODE_ENV=test mocha --harmony --reporter spec test )