UNPKG

4.59 kBJavaScriptView Raw
1import fs from "fs";
2import path from "path";
3import http from "http";
4import glob from "glob";
5import utils from "node-pearls";
6import config from "../config";
7
8const loader = "enjoy-loader@0.1/loader.js";
9const booter = "enjoy-loader@0.1/booter.js";
10
11export default function(options){
12 const root = process.cwd();
13 const enjoyJson = utils.readJson.sync(path.join(root, "enjoy.json"));
14 const packageJson = utils.readJson.sync(path.join(root, "package.json"));
15 const packageName = [packageJson.name, packageJson.version].join("@");
16 const entryRules = enjoyJson.entries["default"].entries;
17 var entries = [];
18 Promise.all(entryRules.map(function(entry){
19 return new Promise(function(resolve, reject){
20 glob(entry, {
21 cwd: root
22 }, function(err, files){
23 entries = entries.concat(files.map(function(file){
24 return path.join(packageName, file);
25 }));
26 resolve();
27 });
28 });
29 })).then(function(){
30 const publishTemp = path.join(process.env.HOME || __dirname, ".publish-temp");
31 console.log(entries);
32 getAbbrs([loader].concat(entries), options.env);
33 });
34}
35
36var backups = [];
37
38function getAbbrs(entries, env) {
39 var files = [];
40 var abbrHash = {};
41
42 Promise.all(entries.map(function (entry) {
43 return new Promise(function (resolve, reject) {
44 var url = config.server[env].deps + entry;
45 // 获取依赖信息
46 http.get(url, function (response) {
47 parseDepsResponse(response, function (abbrs) {
48 abbrHash[entry] = abbrs;
49 resolve();
50 }, function (err) {
51 reject(new Error(`
52 url: ${url}
53 http code: ${err.code}
54 error message: ${err.message}
55 `));
56 });
57 });
58 });
59 })).then(async function () {
60 const booterCode = await getBooterCode();
61
62 var _entries = [
63 loader
64 ].concat(entries[0]).map(function (entry) {
65 return `$atom.script("${entry}");`;
66 }).join("");
67
68 console.log(`\n\n\n\n\n\n\n\n\n\n--------------------* 页面脚本 *--------------------`);
69 var script = `<script>${booterCode}$atom.$map=${JSON.stringify(abbrHash)};$atom.$backup=${JSON.stringify(backups)};$atom.config=${JSON.stringify(config.server[env].config)};${_entries}</script>`;
70 console.log(script);
71 }).catch(function (err) {
72 console.log(err);
73 });
74}
75
76// 解析response数据
77function parseResponse(response, resolve, reject) {
78 var data = "";
79 if (response.statusCode >= 200 && response.statusCode < 300) {
80 response.setEncoding('utf8');
81 response.on('data', function (chunk) {
82 data += chunk;
83 });
84 response.on('end', function () {
85 resolve(data);
86 });
87 } else {
88 reject({
89 code: response.statusCode,
90 message: response.statusMessage
91 });
92 }
93}
94
95function parseDepsResponse(response, resolve, reject){
96 parseResponse(response, function(data){
97 try {
98 data = JSON.parse(data);
99 resolve(data.files.join(","));
100 } catch (e) {
101 console.error(e);
102 console.log(data);
103 reject({
104 code: 500,
105 message: "json解析错误"
106 });
107 }
108 }, reject);
109}
110
111function getBooterCode(){
112 return new Promise(function(resolve, reject){
113 var url = config.server[env].deps + booter;
114 // 获取依赖信息
115 http.get(url, function (response) {
116 parseDepsResponse(response, function (abbrs) {
117 var url = config.server[env].config.base + abbrs;
118 http.get(url, function(response){
119 parseResponse(response, function(code){
120 resolve(code);
121 }, function(err){
122 reject(new Error(`
123 url: ${url}
124 http code: ${err.code}
125 error message: ${err.message}
126 `));
127 });
128 });
129 }, function (err) {
130 reject(new Error(`
131 url: ${url}
132 http code: ${err.code}
133 error message: ${err.message}
134 `));
135 });
136 });
137 });
138}
\No newline at end of file