-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
94 lines (84 loc) · 3.69 KB
/
server.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
const express = require('express');
const path = require('path');
const init = require('init-package-json');
const fs = require('fs');
const bodyParser = require('body-parser');
const exec = require('executive');
const execС = require('child_process').exec;
const app = express();
app.use(express.static(path.resolve(__dirname)));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.post('/newProject', function(req, res){
//Создаем директорию проекта
fs.mkdir(req.body.name, ()=>{
//Создаем директорию модулей в проекте
fs.mkdir(path.resolve(__dirname, req.body.name, 'node_modules'), ()=>{
res.end();
});
});
});
app.post('/addDependency', function(req, res){
fs.access(path.resolve(req.body.nameProject, 'index.js'),(error)=>{
if(error){
//Если файл еще не создан
fs.writeFile(path.resolve(req.body.nameProject, 'index.js'), `let ${req.body.variableDependency} = require('${req.body.nameDependency}'); module.exports = ${req.body.variableDependency}`,
()=>{npmIDependency(req.body.nameDependency, path.resolve(req.body.nameProject), (stderr)=>{
//Если ошибка вылетела наверняка это о том, что зависимости такой нет
//Но это не точно
if(stderr){
//Шлем на фронтенд, что нет такой зависимости
res.json({'error':'noDependencyInNPM'});
} else {
browserifyThat(path.resolve(req.body.nameProject), req.body.nameDependency, (data)=>{
res.json(data);
});
}
})}
);
} else {
//Если файл уже создан
fs.writeFile(path.resolve(req.body.nameProject, 'index.js'), `require('${req.body.nameDependency}')`,
()=>{npmIDependency(req.body.nameDependency, path.resolve(req.body.nameProject), (stderr)=>{
//Если ошибка вылетела наверняка это о том, что зависимости такой нет
//Но это не точно
if(stderr){
//Шлем на фронтенд, что нет такой зависимости
res.json({'error':'noDependencyInNPM'});
} else {
browserifyThat(path.resolve(req.body.nameProject), req.body.nameDependency, (data)=>{
res.json(data);
});
}
})}
);
}
})
});
app.post('/makeFile', function(req, res){
//Создаем директорию проекта
fs.writeFile(path.resolve(req.body.nameProject, 'projectCode.json'), JSON.stringify(req.body.projectCode), function(error){
if(error) throw error; // если возникла ошибка
});
res.end();
});
function npmIDependency(dependency, dirrectory, callback){
exec(`npm i --prefix ${dirrectory} ${dependency} --save`, (err, stdout, stderr)=>{
//Консоль ругается в stderr если зависимости нет
//КИдаем ее в callback
callback(stderr);
})
}
function browserifyThat(dirrectory, module, callback){
//exec не работает, пришлось через процесс чайлд. Браузерсерфи тоже гавнюки -r не дает указать дирректорию
function execute(command, callback){
execС(command, function(error, stdout, stderr){ callback(error); });
};
let j = `cd ${path.resolve(dirrectory)} && browserify -r ${module} -o ${path.resolve(dirrectory, 'bundl.js')}`;
execute(j, (std)=>{
fs.readFile(path.resolve(dirrectory, 'bundl.js'), 'utf8', (err, data)=>{
callback(data);
})
});
}
app.listen(80);