UNPKG

fz-react-cli

Version:

A CLI tool for build modern web application and libraries

95 lines (80 loc) 2.61 kB
var path = require('path'); var loaderUtils = require('loader-utils'); module.exports = function(content) { this.cacheable && this.cacheable(); if (!this.emitFile) throw new Error('emitFile is required from module system'); var query = loaderUtils.parseQuery(this.query) || {}; var configKey = query.config || 'fileLoader'; var options = this.options[configKey] || {}; var config = { publicPath: false, useRelativePath: false, name: '[hash].[ext]', publicPathStrigify: true }; // options takes precedence over config Object.keys(options).forEach(function(attr) { config[attr] = options[attr]; }); // query takes precedence over config and options Object.keys(query).forEach(function(attr) { config[attr] = query[attr]; }); var context = config.context || this.options.context; var url = loaderUtils.interpolateName(this, config.name, { context: context, content: content, regExp: config.regExp }); var outputPath = ''; var filePath = this.resourcePath; if (config.useRelativePath) { var issuerContext = (this._module && this._module.issuer && this._module.issuer.context) || context; var relativeUrl = issuerContext && path .relative(issuerContext, filePath) .split(path.sep) .join('/'); var relativePath = relativeUrl && path.dirname(relativeUrl) + '/'; if (~relativePath.indexOf('../')) { outputPath = path.posix.join(outputPath, relativePath, url); } else { outputPath = relativePath + url; } url = relativePath + url; } else if (config.outputPath) { // support functions as outputPath to generate them dynamically outputPath = typeof config.outputPath === 'function' ? config.outputPath(url) : config.outputPath + url; url = outputPath; } else { outputPath = url; } var publicPath = '__webpack_public_path__ + ' + JSON.stringify(url); if (config.publicPath !== false) { // support functions as publicPath to generate them dynamically if (config.publicPathStringify) { publicPath = JSON.Stringify( typeof config.publicPath === 'function' ? config.publicPath(url) : config.publicPath + url ); } else { publicPath = typeof config.publicPath === 'function' ? config.publicPath(url) : config.publicPath + url; } } if (query.emitFile === undefined || query.emitFile) { this.emitFile(outputPath, content); } return 'module.exports = ' + publicPath + ';'; }; module.exports.raw = true;