mirror of
https://github.com/wu736139669/Monkey-Test.git
synced 2026-08-05 05:55:46 +00:00
75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
var assign = require('object-assign');
|
|
var babel = require('babel-core');
|
|
var loaderUtils = require('loader-utils');
|
|
var cache = require('./lib/fs-cache.js');
|
|
var resolveRc = require('./lib/resolve-rc.js');
|
|
var pkg = require('./package.json');
|
|
var babelrc = resolveRc(process.cwd());
|
|
|
|
var transpile = function(source, options) {
|
|
var result = babel.transform(source, options);
|
|
var code = result.code;
|
|
var map = result.map;
|
|
|
|
if (map && (!map.sourcesContent || !map.sourcesContent.length)) {
|
|
map.sourcesContent = [source];
|
|
}
|
|
|
|
return {
|
|
code: code,
|
|
map: map,
|
|
};
|
|
};
|
|
|
|
module.exports = function(source, inputSourceMap) {
|
|
var result = {};
|
|
// Handle options
|
|
var webpackRemainingChain = loaderUtils.getRemainingRequest(this).split('!');
|
|
var filename = webpackRemainingChain[webpackRemainingChain.length - 1];
|
|
var defaultOptions = {
|
|
inputSourceMap: inputSourceMap,
|
|
filename: filename,
|
|
cacheIdentifier: JSON.stringify({
|
|
'babel-loader': pkg.version,
|
|
'babel-core': babel.version,
|
|
babelrc: babelrc || '',
|
|
}),
|
|
};
|
|
var globalOptions = this.options.babel || {};
|
|
var loaderOptions = loaderUtils.parseQuery(this.query);
|
|
var options = assign({}, defaultOptions, globalOptions, loaderOptions);
|
|
|
|
if (options.sourceMap === undefined) {
|
|
options.sourceMap = this.sourceMap;
|
|
}
|
|
|
|
var cacheDirectory = options.cacheDirectory;
|
|
var cacheIdentifier = options.cacheIdentifier;
|
|
|
|
delete options.cacheDirectory;
|
|
delete options.cacheIdentifier;
|
|
delete options.babelrc;
|
|
|
|
this.cacheable();
|
|
|
|
if (cacheDirectory) {
|
|
var callback = this.async();
|
|
return cache({
|
|
directory: cacheDirectory,
|
|
identifier: cacheIdentifier,
|
|
source: source,
|
|
options: options,
|
|
transform: transpile,
|
|
}, function(err, result) {
|
|
if (err) { return callback(err); }
|
|
return callback(null, result.code, result.map);
|
|
});
|
|
}
|
|
|
|
result = transpile(source, options);
|
|
this.callback(null, result.code, result.map);
|
|
|
|
};
|