-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
113 lines (96 loc) · 3.15 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"use strict";
const fs = require('fs');
const g = require('genery');
const ncp = require('ncp').ncp;
const path = require('path');
const DEFAULT_PRIVATE_NODE_MODULE = 'private_node_modules';
const child_process = require("child_process");
ncp.limit = 16;
let exec = function(cmd, cwd) {
return new Promise(function(resolve, reject) {
child_process.exec(cmd, {
cwd: cwd
}, function(err, stdout, stderr) {
if (err) return reject(err);
if (stdout) console.log(stdout)
if (stderr) console.log(stderr)
resolve();
})
});
};
/**
* copy all dependencies from private node module to node module for production
*/
function copyFromPrivate(module) {
var cwd = process.cwd();
return new Promise(function(resolve, reject) {
let source = DEFAULT_PRIVATE_NODE_MODULE + '/' + module;
let dest = 'node_modules/' + module;
console.log('copy from ' + source + ' to ' + dest);
ncp(source, dest, {
filter: function(name) {
name = name.slice(cwd.length + 2 + source.length)
return !(name.startsWith('node_modules'));
}
}, function(err) {
if (err)
return reject(err)
resolve()
});
});
}
/**
* copy local module in the private node module area
*/
function copyFromLocal(module) {
return new Promise(function(resolve, reject) {
let dest = DEFAULT_PRIVATE_NODE_MODULE + '/' + module;
let source = '../' + module;
console.log('copy from ' + source + ' to ' + dest);
var indexOfSource = path.join(process.cwd(), source).length + 1;
ncp(source, dest, {
filter: function(name) {
name = name.slice(indexOfSource)
return !(name.startsWith('node_modules'));
}
}, function(err) {
if (err)
return reject(err)
resolve()
});
});
}
let readDependencies = function() {
let packageJson = fs.readFileSync('./package.json');
let dependencies = JSON.parse(packageJson).privateDependencies;
console.log('process private package ' + dependencies);
return dependencies;
}
let createPrivateDir = function() {
if (fs.existsSync(DEFAULT_PRIVATE_NODE_MODULE) === false)
fs.mkdirSync(DEFAULT_PRIVATE_NODE_MODULE)
}
g(function * () {
let dependencies = readDependencies();
createPrivateDir();
if (process.env.VCAP_APPLICATION === undefined) {
console.log('********** DEVLOPMENT ***********')
// link private packqge
for (let name in dependencies) {
yield copyFromLocal(name);
yield exec('npm install ', dependencies[name]);
yield exec('npm link '+ dependencies[name]);
}
} else {
console.log('********** STAGING ***********')
// copy private package
for (let name in dependencies) {
yield copyFromPrivate(name);
yield exec('npm install', 'node_modules/' + name);
}
}
console.log('done');
}).catch(function(err) {
console.log(err)
console.log(err.stack)
});