나는이 하나에 내 머리를 두드리는거야;grunt-preprocess와 grunt-env mystery
개발 환경 또는 제작 환경을 기반으로 HTML 파일을 변경하고 싶습니다. 나는 Stackoverflow에 대한 주제를 따라 갔지만 어떻게 든 전처리 - 컨텍스트 인수는 항상 파일의 마지막 것입니다. 좋아요. 일부 발췌 문장을 포함시켜 드리겠습니다. Grunt.js의
조각
//Grunt task to automate environment configuration for future tasks.
env : {
//USER : 'raymond',
//PATH : '/bin:/usr/bin',
options : {
/* Shared Options Hash */
//globalOption : 'foo'
},
dev: {
NODE_ENV : 'DEVELOPMENT'
},
prod : {
NODE_ENV : 'PRODUCTION'
}
},
//Grunt task around preprocess npm module.
preprocess : {
options: {
context : {
DEBUG : true,
now : '<%= grunt.template.today() %>',//@TODO .toISOString()
ver : '<%= pkg.version %>'
}
},
dev : {
options : {
context : {
url : 'http://www.<%= pkg.name %><%= pkg.tld.dev %>',
concat : '<%= pkg.name %><%= pkg.tld.dev %>.concat.js',
uglify : '<%= pkg.name %><%= pkg.tld.dev %>.concat.min.js',
css : '<%= pkg.name %><%= pkg.tld.dev %>.css',
cssMin : '<%= pkg.name %><%= pkg.tld.dev %>.min.css'
}
},
src : 'index.html',
dest : 'dist/dev/index.html'
// @TODO write to dist/dev-directory fails cause probably permissions checked it;
// I have to 777 on www-data to run Nginx properly. Strange cause raymond is part of group www-data
},
prod : {
options : {
context : {
url : 'http://www.<%= pkg.name %><%= pkg.tld.prod %>',
concat : '<%= pkg.name %><%= pkg.tld.prod %>.concat.js',
uglify : '<%= pkg.name %><%= pkg.tld.prod %>.concat.min.js',
css : '<%= pkg.name %><%= pkg.tld.prod %>.css',
cssMin : '<%= pkg.name %><%= pkg.tld.prod %>.min.css'
}
},
src : '<%= preprocess.dev.src %>',
dest : 'dist/prod/index.html'
}
},
이 전처리에 의해 렌더링 된 index.html 도착의 출력
<!-- @if NODE_ENV == 'DEVELOPMENT' -->
<script type="text/javascript" src="/js/vendor/jquery-2.1.0.js"></script>
<script type="text/javascript" src="/js/vendor/jquery.hammer-1.0.6.js"></script>
<script type="text/javascript" src="/js//vendor/snap.svg-0.2.0.js"></script>
<script type="text/javascript" src="/js/vendor/helper.js"></script>
<script type="text/javascript" src="/js/plugins.js"></script>
<script type="text/javascript" src="/js/myradon.js"></script>
<script type="text/javascript" src="/js/myradon-snap.js"></script>
<!--
<script src="<!-- @echo url -->/js/<!-- @echo concat -->"></script>
<script src="<!-- @echo url -->/js/<!-- @echo uglify -->"></script>
-->
<!-- @endif -->
<!-- @if NODE_ENV == 'PRODUCTION' -->
<!-- <script src="<!-- @echo url -->/js/<!-- @echo concat -->"></script> -->
<script src="<!-- @echo url -->/js/<!-- @echo uglify -->"></script>
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-5427260-3']); //www.myradon.net = UA-5427260-2, www.myradon.nl = UA-5427260-3, www2.myradon.net = UA-5427260-4
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
<!-- @endif -->
</body>
소스 index.html을 : 디바이스가;
<!-- <script src="http://www.myradon.net/js/myradon.net.concat.js"></script> -->
<script src="http://www.myradon.net/js/myradon.net.concat.min.js"></script>
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-5427260-3']); //www.myradon.net = UA-5427260-2, www.myradon.nl = UA-5427260-3, www2.myradon.net = UA-5427260-4
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
</body>
당신이 NODE_ENV == '개발'@if 볼 수 있듯이 무시되지만 전처리에서 상황에 맞는 인수 : DEV는 정말 나에게 어떤 sence도하지 않습니다이 NODE_ENV == '생산'을 @if에 전달됩니다. 당신은 단서가 있습니까?!
이 코드를 실행중인 시스템? 'DEVELOPMENT'으로 설정되어 있습니까? 확인을 위해 질문의 결과를 업데이트 할 수 있습니까? – jakerella
무슨 뜻인지 이해가 안됩니다. Github grunt-env 예제도 나를 도와줍니다. Hihih ... 그 루트/노드 멍청한 녀석과 레벨을 비교 해줄 수 있습니까? 편집 : Grunt.js 발췌 문장은 OP에 있습니다. – myradon
그래서'NODE_ENV' 변수는 시스템에 설정된 환경 변수이지 Grunt 또는 Node 자체는 아닙니다. 명령 행에서'echo $ NODE_ENV' (Mac or Linux) 또는'echo % NODE_ENV %'를 사용하여이 변수의 값을 볼 수 있습니다. 비어있는 경우 (설정되지 않은 경우) 설정해야합니다 ([Windows] (http://www.computerhope.com/issues/ch000549.htm), [Mac/Linux] (http : //www.cyberciti. biz/faq/set-environment-variable-linux /)). – jakerella