Пример #1
0
function inputPathToRequireName(input, root) {
	var resolvedInputPath = path.relative(root, input);
	var result = resolvedInputPath
		.replace(/\.js$/, "")
		.replace(/^(\..\/)+/, "");
	return unixify(result);
}
Пример #2
0
	var resolvedModulePaths = modulePaths.map(function (m) {
		try {
			var resolvedModule = resolve(path.resolve(options.input), m);
		} catch (err) {
			throw "Error: Can't resolve module \"" + m + "\" from \"" + options.input + '"';
		}
		var result = path.relative(options.root, resolvedModule);
		result = unixify(result);
		return result;
	});
Пример #3
0
function cutNodeModule(inputName, options) {
	var cwd = path.join(options.root, inputName);
	var p = readPkgUp.sync({cwd: cwd});
	var name = p.pkg.name;
	var main = p.pkg.main;
	var lib = unixify(path.join(name, main));
	if (inputName === lib || (inputName + ".js") === lib) {
		inputName = name;
	}
	return inputName;
}
Пример #4
0
function convert(options) {
	var inputData = options.inputData;
	if (!inputData) {
		try {
			inputData = fs.readFileSync(options.input, "utf8");
		} catch (err) {
			throw "Error: Can't read input file \"" + options.input + "\". " + err.code;
		}
	}

	var requireInputName = inputPathToRequireName(options.input, options.root);

	if (options.cutNodePath) {
		var realPath = null;
		try {
			realPath = require.resolve(requireInputName);
		} catch (e) {
		}
		if (realPath) {
			var p = readPkgUp.sync({cwd: realPath});
			var name = p.pkg.name;
			var main = p.pkg.main;
			var lib = unixify(path.join(name, main));
			if (requireInputName === lib || (requireInputName + ".js") === lib) {
				requireInputName = name;
			}
		}
	}

	var dependencies = getDependencies({
		inputData: inputData,
		input: options.input,
		cutNodePath: options.cutNodePath,
		root: options.root
	});

	var modulesListInDefine = "[" + dependencies
		.map(function(d) {
			if (options.cutNodePath) {
				return cutNodeModule(d.requireName, {root: options.root});
			}
			return d.requireName;
		})
		.map(function (name) { return '"' + name + '"'; }).join(", ") + "]";

	var modulesListInFunction = dependencies.map(function (d) { return d.jsName; }).join(", ");

	var body = inputData.replace(/require\(['"]([^'"]+)['"]\)/g, function(_, modulePath) {
		var dependency = dependencies.find(function(d) {
			return d.originalPath == modulePath;
		});
		return dependency.jsName;
	});

	var converted = (options.require ? "require(" : 'define("' + (options.name || requireInputName) + '", ')
		+ (dependencies.length ? modulesListInDefine  : "[]") + ", "
		+ "function (" + (dependencies.length ? modulesListInFunction : "") + ") {\n"
		+ "var exports = {}, module = { exports: exports };\n\n"
		+ body + "\n"
		+ ((options.global && options.name) ? 'window["' + options.name + '"] = module.exports;\n' : "")
		+ "return module.exports;\n"
		+ "});";

	if (options.recursive) {
		var res = options._deps || {};
		res[requireInputName] = converted;
		dependencies.forEach(function (d) {
			if (res[d.requireName]) {
				return;
			}
			var dependencyRes = convert({
				input: path.join(options.root, d.resolvedPath),
				root: options.root,
				recursive: true,
				_deps: res,
				cutNodePath: options.cutNodePath,
				_recursiveReally: true
			});
			res = merge(res, dependencyRes);
		});
		if (options._recursiveReally === undefined) {
			if (options.bundle) {
				if (options.noDefineSelf) {
					var key = Object.keys(res)[0];
					res[key] = "";
				}
				res = createBundle(res, options);
			}
		}
		return res;
	} else {
		return converted;
	}
}