簡體   English   中英

grunt-預處理和grunt-env之謎

[英]grunt-preprocess and 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>

這是由preprocess:dev呈現的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>

如您所見,@if NODE_ENV =='DEVELOPMENT'被忽略,但是來自preprocess:dev的上下文參數被傳遞給@if NODE_ENV =='PRODUCTION',這對我真的沒有意義。 你有線索嗎?

好的,我正在使用Grunt-processhtml。 它完全符合我的想法。 您可以在上下文中設置變量。 刪除html塊,根據環境設置url或metatagsinnerHTML確實不錯。 唯一的缺點是,也許有一個設置,它留下了html-comment-markup來處理html代碼。

我不知道這是否重要,但是我像在以下示例中那樣使用單個“ =”: npm上的grunt-preprocess

<!-- @if NODE_ENV='production' -->
<script src="some/production/lib/like/analytics.js"></script>
<!-- @endif -->

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM