move npm freeze logic into standalone module

pull/272/head
nightwing 2016-03-16 17:43:18 +04:00
rodzic 22addca061
commit 4dad81677d
2 zmienionych plików z 69 dodań i 18 usunięć

18
bin/c9
Wyświetl plik

@ -1,23 +1,5 @@
#!/usr/bin/env node
// workaround for npm 3 breaking bundled dependencies
var Module = require("module");
if (Module.REPLACE_NODE_MODULE_PATH) {
var path = require("path")
var _resolveFilename_orig = Module._resolveFilename
Module._resolveFilename = function(id, parent) {
var root = path.join(__dirname, "/..");
if (parent && parent.paths && parent.paths[0] && parent.paths[0].indexOf(root) == 0) {
parent.paths = parent.paths.map(function(p) {
if (p.indexOf(root) != 0) return
p = p.slice(root.length);
return root + p.replace(/([\\\/]|^)node_modules([\\\/]|$)/g, "$1n_m$2");
}).filter(Boolean);
}
return _resolveFilename_orig.call(Module, id, parent);
};
}
// Architect
var architect = require("architect");

69
node_modules/architect-build/npm_freeze.js wygenerowano vendored 100644
Wyświetl plik

@ -0,0 +1,69 @@
var patchTemplate = ";(" +function() {
// automatically generated by architect-build
// bundle all dependencies in the main package
var Module = require("module");
var path = require("path");
var _resolveFilename_orig = Module._resolveFilename
var root = path.join(__dirname, "{root}");
Module._resolveFilename = function(id, parent) {
if (parent && parent.paths && parent.paths[0] && parent.paths[0].indexOf(root) == 0) {
parent.paths = parent.paths.map(function(p) {
if (p.indexOf(root) != 0) return
p = p.slice(root.length);
return root + p.replace(/([\\\/]|^)node_modules([\\\/]|$)/g, "$1n_m$2");
}).filter(Boolean);
}
return _resolveFilename_orig.call(Module, id, parent);
};
} + ")();";
//////////////////////////////////////////////////////////////////////////
var fs = require("fs");
var copy = require("architect-build/copy");
var pathLib = require("path");
function freeze(path, mode) {
path = copy.convertPath(path);
var pkgs = {};
function freezePkg(path) {
if (!pkgs[path]) {
pkgs[path] = JSON.parse(fs.readFileSync(path + "/package.json"))
Object.keys(pkgs[path]).forEach(function(k) {
if (/Dependencies/i.test(k)) delete pkgs[path][k];
})
}
pkgs[path].dependencies = {};
var deps = fs.existsSync(path + "/node_modules") ? fs.readdirSync(path + "/node_modules") : [];
deps.forEach(function(n) {
if (n == ".bin") return;
var depPath = path + "/node_modules/" + n;
freezePkg(depPath);
pkgs[path].dependencies[n] = pkgs[depPath].version;
});
if (mode == "rename") {
if (deps.length) {
fs.renameSync(path + "/node_modules/", path + "/n_m")
delete pkgs[path].dependencies
if (pkgs[path].files)
pkgs[path].files.push("n_m")
}
} else {
pkgs[path].bundledDependencies = Object.keys(pkgs[path].dependencies);
}
fs.writeFileSync(path + "/package.json", JSON.stringify(pkgs[path], null, "\t"), "utf8");
}
freezePkg(path);
var bin = pkgs[path].bin;
Object.keys(bin).forEach(function(key) {
var p = bin[key];
var root = pathLib.relative(pathLib.dirname(p), "").replace(/[\\]/g, "/");
var src = fs.readFileSync(path + "/" + p, "utf8");
src = src.replace(/^(#.*|"use strict";?|\s)*/, function(a) {
return a.trim() + "\n\n" + patchTemplate.replace(/{root}/g, root) + "\n\n";
});
fs.writeFileSync(path + "/" + p, src, "utf8");
});
}
module.exports = freeze;