/** * @module utils * @license MIT * @version 2018/03/26 */ /** * @function resolve * @description Resolve a request path * @param {string} request * @param {string} referer * @param {Object} options * @returns {string} */ function resolve(request, referer, options) { // Resolve if (gutil.isAbsolute(request)) { request = path.join(options.root, request); } else if (gutil.isRelative(request)) { request = path.join(path.dirname(referer), request); // Out of bounds of root if (gutil.isOutBounds(request, options.root)) { throw new RangeError(`File ${gutil.normalize(request)} is out of bounds of root.`); } } else { const base = options.base || path.dirname(referer); // Use base or referer dirname request = path.join(base, request); } return request; }
(dependency, media) => { if (gutil.isUrl(dependency)) { // Relative file path from cwd const rpath = JSON.stringify(gutil.path2cwd(path)); // Output warn gutil.logger.warn( gutil.chalk.yellow(`Found remote css file ${JSON.stringify(dependency)} at ${rpath}, unsupported.`), '\x07' ); } else { if (media.length) { // Get media media = JSON.stringify(media.join(', ')); // Relative file path from cwd const rpath = JSON.stringify(gutil.path2cwd(path)); // Output warn gutil.logger.warn( gutil.chalk.yellow(`Found import media queries ${media} at ${rpath}, unsupported.`), '\x07' ); } // Normalize dependency = gutil.normalize(dependency); // Resolve dependency let resolved = resolve(dependency, path, { root }); // Module can read if (gutil.fsSafeAccess(resolved)) { !isIgnoreModule(resolved, options) && modules.add(resolved); } else { // Relative file path from cwd const rpath = JSON.stringify(gutil.path2cwd(path)); // Output warn gutil.logger.warn( gutil.chalk.yellow(`Module ${JSON.stringify(dependency)} at ${rpath} can't be found.`), '\x07' ); } // Use css resolve rule if (!gutil.isRelative(dependency)) dependency = `./${dependency}`; // Parse map dependency = gutil.parseMap(dependency, resolved, options.map); dependency = gutil.normalize(dependency); // The seajs has hacked css before 3.0.0 // https://github.com/seajs/seajs/blob/2.2.1/src/util-path.js#L49 // Demo https://github.com/popomore/seajs-test/tree/master/css-deps dependency = addExt(dependency); // Add dependency dependencies.add(dependency); } return false; },