示例#1
0
exports.check = function (file, errors, done) {
    if (util.isIgnored(file.path)) {
        done();
        return;
    }

    var bizConfig = getProjectJSCSConfig();
    var config = edp.util.extend(kDefaultJSCSConfig, bizConfig);

    var tasks = [
        jshintTask(file),
        jscsTask(file, config)
    ];
    async.series(tasks, function(error, results) {
        var a = results[0];
        var b = results[1];
        if (a.length + b.length) {
            errors.push({
                path: file.path,
                messages: a.concat(b)
            });
        }
        done();
    });
};
示例#2
0
/**
 * 合并配置,用户配置优先
 * 
 * @param {Object} options 用户配置数据
 */
function merge(options) {

    // 处理测试页面的 require.config 配置
    // 优先级低到高:edp-test 默认配置 -> 项目 module.conf -> config.js 配置
    var requireConfig = require('./require-config');
    requireConfig.merge(config.requireConfig, requireConfig.readFromProject());
    if (options.requireConfig) {
        requireConfig.merge(config.requireConfig, options.requireConfig);
        delete options.requireConfig;
    }
    edp.util.extend(config, options);
}
示例#3
0
/**
 * 更新文件的config
 *
 * @inner
 * @param {string} file 文件路径
 * @param {string=} encoding 文件编码
 */
function updateFileConfig(file, encoding) {
    encoding = encoding || 'UTF-8';
    var fileContent = fs.readFileSync(file, encoding);
    var confInfo = require('./util/read-loader-config')(fileContent, file);

    // FIXME(user) 基本不会用到这个功能吧
    var fileMetadata = {};
    try {
        fileMetadata = require('./util/get-file-metadata')(file);
    }
    catch (ex) {}

    if (confInfo && fileMetadata.loaderAutoConfig !== false) {
        var projectData = exports.getConfig(file);
        if (!projectData) {
            return;
        }

        var configData = confInfo.data;

        // 两份儿数据merge起来,不应该直接用module.conf的内容覆盖
        configData.paths = edp.util.extend(configData.paths || {},
            projectData.paths);

        // 两份儿数据merge起来,不应该直接用module.conf的内容覆盖
        // configData里面的优先级应该更高一些,如果有不一致的地方,给出warning信息
        if (!configData.packages || configData.packages.length <= 0) {
            configData.packages = projectData.packages;
        }
        else {
            exports.mergePackages(configData.packages, projectData.packages, file);
        }

        // 如果文件的meta data里面设置过 preserveBaseUrl ,那么不需要修改baseUrl了
        // 但是packages的路径还是需要修改的
        if (configData.baseUrl && fileMetadata.preserveBaseUrl !== true) {
            // 如果以前存在baseUrl,才覆盖,否则不要给我追加baseUrl
            // esui的demo/loader/config.js里面没有baseUrl,如果给追加了,就不对了.
            if (configData.baseUrl !== projectData.baseUrl) {
                edp.log.info('Set baseUrl from [%s] to [%s] @ [%s]',
                    configData.baseUrl, projectData.baseUrl, file);
                configData.baseUrl = projectData.baseUrl;
            }
        }

        fs.writeFileSync(
            file,
            require('./util/replace-loader-config')(configData, confInfo),
            encoding
        );
    }
}
示例#4
0
文件: File.js 项目: ecomfe/edp-minify
File.prototype.read = function (options) {
    var me = this;
    var opts = edp.util.extend({}, {encoding: 'utf8'}, options);
    var filePath = me.filePath;
    if (!filePath || !fs.existsSync(filePath)) {
        me.emit('NOTFOUNDFILE', filePath);
        return false;
    }

    var data = fs.readFileSync(filePath, opts);
    me.processData(data);

    return true;
};
示例#5
0
exports.run = function (opts) {
    var emitter = new EventEmitter();
    for (var key in opts) {
        if (typeof opts[key] === 'undefined') {
            opts[key] = true;
        }
        else {
            opts[key] = opts[key] === 'true';
        }
    }

    var config = edp.util.extend(require('./config').config, opts);

    var server = require('./server');
    if (!server.build(emitter)) {
        edp.log.warn('Specs not found.');
        return;
    }

    var port = util.getPort(config, function (err, config) {
        var url = 'http://' + util.getIP() + ':' + config.port + '/';
        var serverConfig = require('edp-webserver/lib/config');
        serverConfig.port = config.port;

        // 屏蔽 edp-webserver 的 log
        serverConfig.logger = new Function()

        var getLocations = serverConfig.getLocations;
        serverConfig.getLocations = function () {

            return [
                {
                    location: /^\/(index|home)?$/,
                    handler: server.handler('runner')
                    
                },
                {
                    location: /^\/debug\.html/,
                    handler: server.handler('debug')
                    
                },
                {
                    location: /^\/context\.html/,
                    handler: server.handler('context')
                    
                },
                {
                    location: /^\/src(\/[^\/]+)*\.js/,
                    handler: server.istanbul()
                    
                },
                {
                    location: /^\/.edp-test\/([^\?]+\.([^\?\.]+))/,
                    handler: server.serve()
                    
                }
            ].concat(getLocations());
        };

        console.log(require('qransi').create({ text: url, typeNumber: 0}));
        
        var webserver = require('edp-webserver').start(serverConfig);
        
        var io = require('socket.io').listen(webserver, {'log level': 1});
        var browsers = require('./browsers').init();

        if (config.singleRun) {
            emitter.on('finish', process.exit);
        }

        browsers.open(url);

        io.on('connection', function (socket) {

            socket.on('registerBrowser', function(browser) {
                browser.socket = socket;
                browser.emitter = emitter;
                browsers.add(browser);
            });

            socket.on('registerClient', function (client) {
                // TODO
            });

        });

    });
};
示例#6
0
    return function (context) {
        var request = context.request;
        var proxyMap  = context.conf.proxyMap;
        if (!hostname && !proxyMap) {

            // 没有响应不友好,根本看不出来啥问题
            context.content = '<h1>Not Found</h1>' + '<p>The requested URL '+ request.pathname +' was not found on this server.</p>';
            return;
        }
        else if (!hostname) {
            var host = request.headers['host'];
            if (proxyMap[host]) {
                var matched = proxyMap[host].split(':');
                hostname = matched[0];
                port = matched[1] || port;
            }
            else {
                edp.log.warn('Can not find matched host for %s', chalk.red(host));
                return;
            }
        }

        // http or https
        var agent = /^https:/.test(hostname) ? https : http;
        var index = hostname.indexOf('://');
        if (index !== -1) {
            hostname = hostname.substring(index + 3);
        } else if (port == 443) {
            // 如果hostname没有https或者http开头,则如果port是443,使用https
            agent = https;
        }

        context.stop();

        // build request options
        var targetHost = hostname + ( port ? ':' + port : '' );
        var reqHeaders = request.headers;

        if ( typeof context.conf.overrideProxyRequestHeader === 'function' ) {
            // modify the request host to target host
            context.conf.overrideProxyRequestHeader( reqHeaders );
        }
        else if ( typeof requestHeaders === 'object' ) {
            reqHeaders = edp.util.extend( reqHeaders, requestHeaders );
        }

        var reqOptions = {
            hostname   : hostname,
            port       : port || 80,
            method     : request.method,
            path       : request.url,
            headers    : reqHeaders
        };


        // create request object
        var start = Date.now();
        var req = agent.request( reqOptions, function ( res ) {
            var content = [];
            res.on( 'data', function ( chunk ) {
                content.push( chunk );
            } );

            res.on( 'end', function () {
                edp.log.info( chalk.yellow( 'PROXY' ) + ' %s to %s - - %s ms', chalk.green(request.url),
                    chalk.green(targetHost + request.url), Date.now() - start );

                context.content = Buffer.concat( content );
                context.header = res.headers;
                if ( !res.headers.connection ) {
                    context.header.connection = 'close';
                }
                if ( typeof context.conf.overrideProxyResponseHeader === 'function' ) {
                    context.conf.overrideProxyResponseHeader( context.header );
                }
                context.status = res.statusCode;
                context.start();
            } );
        } );

        req.on('error', function (err) {
            edp.log.error( chalk.yellow( 'PROXY' ) + ' %s to %s - - %s ms', chalk.green(request.url),
                chalk.green(targetHost + request.url), Date.now() - start );

            context.status = 500;
            context.content = '';
            context.start();
        });

        // send request data
        var buffer = context.request.bodyBuffer;
        buffer && req.write( buffer );
        req.end();
    };