@tarojs/rn-runner 3.3.16 → 3.3.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/preview.js +102 -0
- package/dist/config/preview.js.map +1 -0
- package/dist/index.js +17 -27
- package/dist/index.js.map +1 -1
- package/dist/utils.js +28 -0
- package/dist/utils.js.map +1 -0
- package/package.json +7 -6
- package/src/config/preview.ts +113 -0
- package/src/index.ts +12 -22
- package/src/utils.ts +25 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var mime = require("mime-types");
|
|
4
|
+
var http_1 = require("http");
|
|
5
|
+
var fs_1 = require("fs");
|
|
6
|
+
var qrcode_terminal_1 = require("qrcode-terminal");
|
|
7
|
+
var utils_1 = require("../utils");
|
|
8
|
+
var url_1 = require("url");
|
|
9
|
+
var path_1 = require("path");
|
|
10
|
+
var drawableFileTypes = new Set([
|
|
11
|
+
'gif',
|
|
12
|
+
'jpeg',
|
|
13
|
+
'jpg',
|
|
14
|
+
'png',
|
|
15
|
+
'webp',
|
|
16
|
+
'xml'
|
|
17
|
+
]);
|
|
18
|
+
function getAndroidAssetSuffix(scale) {
|
|
19
|
+
switch (scale) {
|
|
20
|
+
case 0.75:
|
|
21
|
+
return 'ldpi';
|
|
22
|
+
case 1:
|
|
23
|
+
return 'mdpi';
|
|
24
|
+
case 1.5:
|
|
25
|
+
return 'hdpi';
|
|
26
|
+
case 2:
|
|
27
|
+
return 'xhdpi';
|
|
28
|
+
case 3:
|
|
29
|
+
return 'xxhdpi';
|
|
30
|
+
case 4:
|
|
31
|
+
return 'xxxhdpi';
|
|
32
|
+
default:
|
|
33
|
+
return '';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function getAndroidResourceFolderName(pathname) {
|
|
37
|
+
var ext = path_1.extname(pathname).replace(/^./, '').toLowerCase();
|
|
38
|
+
if (!drawableFileTypes.has(ext)) {
|
|
39
|
+
return 'raw';
|
|
40
|
+
}
|
|
41
|
+
var suffix = getAndroidAssetSuffix(1); // TODO: auto scale
|
|
42
|
+
var androidFolder = "drawable-" + suffix;
|
|
43
|
+
return androidFolder;
|
|
44
|
+
}
|
|
45
|
+
function getAndroidResourceIdentifier(pathname) {
|
|
46
|
+
if (pathname[0] === '/') {
|
|
47
|
+
pathname = pathname.substr(1);
|
|
48
|
+
}
|
|
49
|
+
var ext = path_1.extname(pathname).toLowerCase();
|
|
50
|
+
var extReg = new RegExp(ext + '$');
|
|
51
|
+
return pathname
|
|
52
|
+
.replace(extReg, '')
|
|
53
|
+
.toLowerCase()
|
|
54
|
+
.replace(/\//g, '_')
|
|
55
|
+
.replace(/([^a-z0-9_])/g, '')
|
|
56
|
+
.replace(/^assets_/, '') + ext;
|
|
57
|
+
}
|
|
58
|
+
exports.default = (function (opt) {
|
|
59
|
+
var port = process.env.PORT || 8079;
|
|
60
|
+
var host = "http://" + utils_1.getOpenHost() + ":" + port;
|
|
61
|
+
http_1.createServer(function (request, response) {
|
|
62
|
+
var url = new url_1.URL(request.url || '', host);
|
|
63
|
+
console.log(request.method + " " + request.url);
|
|
64
|
+
if (url.pathname === '/inspector/device') {
|
|
65
|
+
response.writeHead(404);
|
|
66
|
+
response.end('404', 'utf-8');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
var filePath;
|
|
70
|
+
var contentType = mime.lookup(url.pathname);
|
|
71
|
+
if (url.pathname === '/index.js') {
|
|
72
|
+
filePath = opt.out;
|
|
73
|
+
}
|
|
74
|
+
else if (opt.platform === 'ios') {
|
|
75
|
+
filePath = path_1.join(opt.assetsDest || '', url.pathname);
|
|
76
|
+
}
|
|
77
|
+
else if (opt.platform === 'android') {
|
|
78
|
+
filePath = path_1.join(opt.assetsDest || '', getAndroidResourceFolderName(url.pathname), getAndroidResourceIdentifier(url.pathname));
|
|
79
|
+
}
|
|
80
|
+
fs_1.readFile(filePath, function (error, content) {
|
|
81
|
+
if (error) {
|
|
82
|
+
if (error.code === 'ENOENT') {
|
|
83
|
+
response.writeHead(404);
|
|
84
|
+
response.end('404', 'utf-8');
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
response.writeHead(500);
|
|
88
|
+
response.end('500', 'utf-8');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
response.writeHead(200, { 'Content-Type': contentType });
|
|
93
|
+
response.end(content, 'utf-8');
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}).listen(port);
|
|
97
|
+
var url = host + "/index.js";
|
|
98
|
+
console.log(utils_1.PLAYGROUNDINFO);
|
|
99
|
+
console.log("print qrcode of " + opt.platform + " bundle '" + url + "':");
|
|
100
|
+
qrcode_terminal_1.generate(url, { small: true });
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/config/preview.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -50,11 +50,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
50
50
|
var Metro = require("metro");
|
|
51
51
|
var config_1 = require("./config");
|
|
52
52
|
var config_holder_1 = require("./config/config-holder");
|
|
53
|
+
var utils_1 = require("./utils");
|
|
54
|
+
var preview_1 = require("./config/preview");
|
|
53
55
|
var helper_1 = require("@tarojs/helper");
|
|
54
56
|
var path = require("path");
|
|
55
57
|
var fse = require("fs-extra");
|
|
56
58
|
var url = require("url");
|
|
57
|
-
var os_1 = require("os");
|
|
58
59
|
var qrcode_terminal_1 = require("qrcode-terminal");
|
|
59
60
|
var readline = require("readline");
|
|
60
61
|
var cli_server_api_1 = require("@react-native-community/cli-server-api");
|
|
@@ -122,32 +123,12 @@ function getOutputSourceMapOption(config) {
|
|
|
122
123
|
sourcemapSourcesRoot: sourcemapSourcesRoot
|
|
123
124
|
};
|
|
124
125
|
}
|
|
125
|
-
function getOpenHost() {
|
|
126
|
-
var _a;
|
|
127
|
-
var result;
|
|
128
|
-
var interfaces = os_1.networkInterfaces();
|
|
129
|
-
for (var devName in interfaces) {
|
|
130
|
-
var isEnd = (_a = interfaces[devName]) === null || _a === void 0 ? void 0 : _a.some(function (item) {
|
|
131
|
-
// 取IPv4, 不为127.0.0.1的内网ip
|
|
132
|
-
if (item.family === 'IPv4' && item.address !== '127.0.0.1' && !item.internal) {
|
|
133
|
-
result = item.address;
|
|
134
|
-
return true;
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
});
|
|
138
|
-
// 若获取到ip, 结束遍历
|
|
139
|
-
if (isEnd) {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
return result;
|
|
144
|
-
}
|
|
145
126
|
// TODO: 返回值
|
|
146
127
|
// HttpServer | {code: string, map: string}
|
|
147
128
|
// IBuildConfig
|
|
148
129
|
function build(appPath, config) {
|
|
149
130
|
return __awaiter(this, void 0, void 0, function () {
|
|
150
|
-
var entry, metroConfig, sourceRoot, commonOptions, onFinish, _a, middleware_1, attachToServer_1,
|
|
131
|
+
var entry, metroConfig, sourceRoot, commonOptions, onFinish, _a, middleware_1, attachToServer_1, options_1, savedBuildFunc_1, server, sourceMapOption, requestOptions, bundle, outputOptions, outputAssets, assetsDest_1, e_1;
|
|
151
132
|
var _this = this;
|
|
152
133
|
return __generator(this, function (_b) {
|
|
153
134
|
switch (_b.label) {
|
|
@@ -235,9 +216,10 @@ function build(appPath, config) {
|
|
|
235
216
|
}
|
|
236
217
|
});
|
|
237
218
|
if (config.qr) {
|
|
238
|
-
var host = getOpenHost();
|
|
219
|
+
var host = utils_1.getOpenHost();
|
|
239
220
|
if (host) {
|
|
240
221
|
var url_1 = "taro://" + host + ":" + metroConfig.server.port;
|
|
222
|
+
console.log(utils_1.PLAYGROUNDINFO);
|
|
241
223
|
console.log("print qrcode of '" + url_1 + "':");
|
|
242
224
|
qrcode_terminal_1.generate(url_1, { small: true });
|
|
243
225
|
}
|
|
@@ -251,7 +233,7 @@ function build(appPath, config) {
|
|
|
251
233
|
onFinish(e);
|
|
252
234
|
})];
|
|
253
235
|
case 2:
|
|
254
|
-
|
|
236
|
+
options_1 = __assign(__assign({}, commonOptions), { entry: './index', out: concatOutputFileName(config) });
|
|
255
237
|
savedBuildFunc_1 = outputBundle.build;
|
|
256
238
|
outputBundle.build = function (packagerClient, requestOptions) { return __awaiter(_this, void 0, void 0, function () {
|
|
257
239
|
var resolutionFn;
|
|
@@ -270,11 +252,11 @@ function build(appPath, config) {
|
|
|
270
252
|
_b.label = 3;
|
|
271
253
|
case 3:
|
|
272
254
|
_b.trys.push([3, 8, 9, 10]);
|
|
273
|
-
requestOptions = __assign(__assign(__assign({}, commonOptions), sourceMapOption), { entryFile:
|
|
255
|
+
requestOptions = __assign(__assign(__assign({}, commonOptions), sourceMapOption), { entryFile: options_1.entry, inlineSourceMap: false, createModuleIdFactory: metroConfig.serializer.createModuleIdFactory });
|
|
274
256
|
return [4 /*yield*/, outputBundle.build(server, requestOptions)];
|
|
275
257
|
case 4:
|
|
276
258
|
bundle = _b.sent();
|
|
277
|
-
outputOptions = __assign(__assign(__assign({}, commonOptions), sourceMapOption), { bundleOutput:
|
|
259
|
+
outputOptions = __assign(__assign(__assign({}, commonOptions), sourceMapOption), { bundleOutput: options_1.out });
|
|
278
260
|
return [4 /*yield*/, outputBundle.save(bundle, outputOptions, console.log)
|
|
279
261
|
// Save the assets of the bundle
|
|
280
262
|
];
|
|
@@ -283,7 +265,15 @@ function build(appPath, config) {
|
|
|
283
265
|
return [4 /*yield*/, server.getAssets(__assign(__assign({}, Server.DEFAULT_BUNDLE_OPTIONS), requestOptions))];
|
|
284
266
|
case 6:
|
|
285
267
|
outputAssets = _b.sent();
|
|
286
|
-
|
|
268
|
+
assetsDest_1 = concatOutputAssetsDest(config);
|
|
269
|
+
return [4 /*yield*/, saveAssets_1.default(outputAssets, options_1.platform, assetsDest_1).then(function () {
|
|
270
|
+
if (config.qr) {
|
|
271
|
+
preview_1.default({
|
|
272
|
+
out: options_1.out,
|
|
273
|
+
assetsDest: assetsDest_1,
|
|
274
|
+
platform: options_1.platform
|
|
275
|
+
});
|
|
276
|
+
}
|
|
287
277
|
onFinish(null);
|
|
288
278
|
})];
|
|
289
279
|
case 7: return [2 /*return*/, _b.sent()];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA8B;AAC9B,mCAAqC;AACrC,wDAAyD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PLAYGROUNDINFO = exports.PLAYGROUNDREPO = exports.getOpenHost = void 0;
|
|
4
|
+
var os_1 = require("os");
|
|
5
|
+
function getOpenHost() {
|
|
6
|
+
var _a;
|
|
7
|
+
var result;
|
|
8
|
+
var interfaces = os_1.networkInterfaces();
|
|
9
|
+
for (var devName in interfaces) {
|
|
10
|
+
var isEnd = (_a = interfaces[devName]) === null || _a === void 0 ? void 0 : _a.some(function (item) {
|
|
11
|
+
// 取IPv4, 不为127.0.0.1的内网ip
|
|
12
|
+
if (item.family === 'IPv4' && item.address !== '127.0.0.1' && !item.internal) {
|
|
13
|
+
result = item.address;
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
});
|
|
18
|
+
// 若获取到ip, 结束遍历
|
|
19
|
+
if (isEnd) {
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
exports.getOpenHost = getOpenHost;
|
|
26
|
+
exports.PLAYGROUNDREPO = 'https://github.com/wuba/taro-playground';
|
|
27
|
+
exports.PLAYGROUNDINFO = "use [Taro Playground App](" + exports.PLAYGROUNDREPO + ") to scan";
|
|
28
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,yBAAsC;AAEtC,SAAgB,WAAW;;IACzB,IAAI,MAAM,CAAA;IACV,IAAM,UAAU,GAAG,sBAAiB,EAAE,CAAA;IACtC,KAAK,IAAM,OAAO,IAAI,UAAU,EAAE;QAChC,IAAM,KAAK,GAAG,MAAA,UAAU,CAAC,OAAO,CAAC,0CAAE,IAAI,CAAC,UAAA,IAAI;YAC1C,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC5E,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;gBACrB,OAAO,IAAI,CAAA;aACZ;YACD,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;QACF,eAAe;QACf,IAAI,KAAK,EAAE;YACT,MAAK;SACN;KACF;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAlBD,kCAkBC;AAEY,QAAA,cAAc,GAAG,yCAAyC,CAAA;AAE1D,QAAA,cAAc,GAAG,+BAA6B,sBAAc,cAAW,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tarojs/rn-runner",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.17",
|
|
4
4
|
"description": "ReactNative build tool for taro",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@react-native-community/cli": "^5.0.1",
|
|
34
34
|
"@react-native-community/cli-server-api": "^5.0.1",
|
|
35
|
-
"@tarojs/helper": "3.3.
|
|
36
|
-
"@tarojs/rn-style-transformer": "3.3.
|
|
37
|
-
"@tarojs/rn-supporter": "3.3.
|
|
38
|
-
"@tarojs/rn-transformer": "3.3.
|
|
35
|
+
"@tarojs/helper": "3.3.17",
|
|
36
|
+
"@tarojs/rn-style-transformer": "3.3.17",
|
|
37
|
+
"@tarojs/rn-supporter": "3.3.17",
|
|
38
|
+
"@tarojs/rn-transformer": "3.3.17",
|
|
39
39
|
"fs-extra": "^9.0.1",
|
|
40
40
|
"lodash": "^4.17.4",
|
|
41
41
|
"metro": "^0.66.2",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"metro-core": "^0.66.2",
|
|
45
45
|
"metro-react-native-babel-transformer": "^0.66.2",
|
|
46
46
|
"metro-resolver": "^0.66.2",
|
|
47
|
+
"mime-types": "^2.1.27",
|
|
47
48
|
"qrcode-terminal": "^0.12.0"
|
|
48
49
|
},
|
|
49
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "3f3ce5f66d370b1982a30e4a5f2c8eb383652063"
|
|
50
51
|
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import * as mime from 'mime-types'
|
|
2
|
+
import { createServer } from 'http'
|
|
3
|
+
import { readFile } from 'fs'
|
|
4
|
+
import { generate } from 'qrcode-terminal'
|
|
5
|
+
import { getOpenHost, PLAYGROUNDINFO } from '../utils'
|
|
6
|
+
import { URL } from 'url'
|
|
7
|
+
import { join, extname } from 'path'
|
|
8
|
+
|
|
9
|
+
interface PreviewOption {
|
|
10
|
+
out: string
|
|
11
|
+
platform: string
|
|
12
|
+
assetsDest?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const drawableFileTypes = new Set<string>([
|
|
16
|
+
'gif',
|
|
17
|
+
'jpeg',
|
|
18
|
+
'jpg',
|
|
19
|
+
'png',
|
|
20
|
+
'webp',
|
|
21
|
+
'xml'
|
|
22
|
+
])
|
|
23
|
+
|
|
24
|
+
function getAndroidAssetSuffix (scale: number): string {
|
|
25
|
+
switch (scale) {
|
|
26
|
+
case 0.75:
|
|
27
|
+
return 'ldpi'
|
|
28
|
+
case 1:
|
|
29
|
+
return 'mdpi'
|
|
30
|
+
case 1.5:
|
|
31
|
+
return 'hdpi'
|
|
32
|
+
case 2:
|
|
33
|
+
return 'xhdpi'
|
|
34
|
+
case 3:
|
|
35
|
+
return 'xxhdpi'
|
|
36
|
+
case 4:
|
|
37
|
+
return 'xxxhdpi'
|
|
38
|
+
default:
|
|
39
|
+
return ''
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function getAndroidResourceFolderName (pathname:string): string {
|
|
44
|
+
const ext = extname(pathname).replace(/^./, '').toLowerCase()
|
|
45
|
+
if (!drawableFileTypes.has(ext)) {
|
|
46
|
+
return 'raw'
|
|
47
|
+
}
|
|
48
|
+
const suffix = getAndroidAssetSuffix(1) // TODO: auto scale
|
|
49
|
+
const androidFolder = `drawable-${suffix}`
|
|
50
|
+
return androidFolder
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function getAndroidResourceIdentifier (pathname:string): string {
|
|
54
|
+
if (pathname[0] === '/') {
|
|
55
|
+
pathname = pathname.substr(1)
|
|
56
|
+
}
|
|
57
|
+
const ext = extname(pathname).toLowerCase()
|
|
58
|
+
const extReg = new RegExp(ext + '$')
|
|
59
|
+
return pathname
|
|
60
|
+
.replace(extReg, '')
|
|
61
|
+
.toLowerCase()
|
|
62
|
+
.replace(/\//g, '_')
|
|
63
|
+
.replace(/([^a-z0-9_])/g, '')
|
|
64
|
+
.replace(/^assets_/, '') + ext
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default (opt: PreviewOption):void => {
|
|
68
|
+
const port = process.env.PORT || 8079
|
|
69
|
+
const host = `http://${getOpenHost()}:${port}`
|
|
70
|
+
|
|
71
|
+
createServer(function (request, response) {
|
|
72
|
+
const url = new URL(request.url || '', host)
|
|
73
|
+
|
|
74
|
+
console.log(`${request.method} ${request.url}`)
|
|
75
|
+
|
|
76
|
+
if (url.pathname === '/inspector/device') {
|
|
77
|
+
response.writeHead(404)
|
|
78
|
+
response.end('404', 'utf-8')
|
|
79
|
+
return
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let filePath
|
|
83
|
+
const contentType = mime.lookup(url.pathname)
|
|
84
|
+
|
|
85
|
+
if (url.pathname === '/index.js') {
|
|
86
|
+
filePath = opt.out
|
|
87
|
+
} else if (opt.platform === 'ios') {
|
|
88
|
+
filePath = join(opt.assetsDest || '', url.pathname)
|
|
89
|
+
} else if (opt.platform === 'android') {
|
|
90
|
+
filePath = join(opt.assetsDest || '', getAndroidResourceFolderName(url.pathname), getAndroidResourceIdentifier(url.pathname))
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
readFile(filePath, function (error, content) {
|
|
94
|
+
if (error) {
|
|
95
|
+
if (error.code === 'ENOENT') {
|
|
96
|
+
response.writeHead(404)
|
|
97
|
+
response.end('404', 'utf-8')
|
|
98
|
+
} else {
|
|
99
|
+
response.writeHead(500)
|
|
100
|
+
response.end('500', 'utf-8')
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
response.writeHead(200, { 'Content-Type': contentType })
|
|
104
|
+
response.end(content, 'utf-8')
|
|
105
|
+
}
|
|
106
|
+
})
|
|
107
|
+
}).listen(port)
|
|
108
|
+
|
|
109
|
+
const url = `${host}/index.js`
|
|
110
|
+
console.log(PLAYGROUNDINFO)
|
|
111
|
+
console.log(`print qrcode of ${opt.platform} bundle '${url}':`)
|
|
112
|
+
generate(url, { small: true })
|
|
113
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import * as Metro from 'metro'
|
|
2
2
|
import getMetroConfig from './config'
|
|
3
3
|
import { getRNConfigEntry } from './config/config-holder'
|
|
4
|
+
import { getOpenHost, PLAYGROUNDINFO } from './utils'
|
|
5
|
+
import preview from './config/preview'
|
|
4
6
|
|
|
5
7
|
import { PLATFORMS } from '@tarojs/helper'
|
|
6
8
|
import * as path from 'path'
|
|
7
9
|
import * as fse from 'fs-extra'
|
|
8
10
|
import * as url from 'url'
|
|
9
|
-
import { networkInterfaces } from 'os'
|
|
10
11
|
import { generate } from 'qrcode-terminal'
|
|
11
12
|
|
|
12
13
|
import * as readline from 'readline'
|
|
@@ -74,26 +75,6 @@ function getOutputSourceMapOption (config: any): Record<string, any> {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
|
|
77
|
-
function getOpenHost () {
|
|
78
|
-
let result
|
|
79
|
-
const interfaces = networkInterfaces()
|
|
80
|
-
for (const devName in interfaces) {
|
|
81
|
-
const isEnd = interfaces[devName]?.some(item => {
|
|
82
|
-
// 取IPv4, 不为127.0.0.1的内网ip
|
|
83
|
-
if (item.family === 'IPv4' && item.address !== '127.0.0.1' && !item.internal) {
|
|
84
|
-
result = item.address
|
|
85
|
-
return true
|
|
86
|
-
}
|
|
87
|
-
return false
|
|
88
|
-
})
|
|
89
|
-
// 若获取到ip, 结束遍历
|
|
90
|
-
if (isEnd) {
|
|
91
|
-
break
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return result
|
|
95
|
-
}
|
|
96
|
-
|
|
97
78
|
// TODO: 返回值
|
|
98
79
|
// HttpServer | {code: string, map: string}
|
|
99
80
|
// IBuildConfig
|
|
@@ -190,6 +171,7 @@ export default async function build (appPath: string, config: any): Promise<any>
|
|
|
190
171
|
const host = getOpenHost()
|
|
191
172
|
if (host) {
|
|
192
173
|
const url = `taro://${host}:${metroConfig.server.port}`
|
|
174
|
+
console.log(PLAYGROUNDINFO)
|
|
193
175
|
console.log(`print qrcode of '${url}':`)
|
|
194
176
|
generate(url, { small: true })
|
|
195
177
|
} else {
|
|
@@ -239,7 +221,15 @@ export default async function build (appPath: string, config: any): Promise<any>
|
|
|
239
221
|
...Server.DEFAULT_BUNDLE_OPTIONS,
|
|
240
222
|
...requestOptions
|
|
241
223
|
})
|
|
242
|
-
|
|
224
|
+
const assetsDest = concatOutputAssetsDest(config)
|
|
225
|
+
return await saveAssets(outputAssets, options.platform, assetsDest).then(() => {
|
|
226
|
+
if (config.qr) {
|
|
227
|
+
preview({
|
|
228
|
+
out: options.out,
|
|
229
|
+
assetsDest,
|
|
230
|
+
platform: options.platform
|
|
231
|
+
})
|
|
232
|
+
}
|
|
243
233
|
onFinish(null)
|
|
244
234
|
})
|
|
245
235
|
} catch (e) {
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { networkInterfaces } from 'os'
|
|
2
|
+
|
|
3
|
+
export function getOpenHost () {
|
|
4
|
+
let result
|
|
5
|
+
const interfaces = networkInterfaces()
|
|
6
|
+
for (const devName in interfaces) {
|
|
7
|
+
const isEnd = interfaces[devName]?.some(item => {
|
|
8
|
+
// 取IPv4, 不为127.0.0.1的内网ip
|
|
9
|
+
if (item.family === 'IPv4' && item.address !== '127.0.0.1' && !item.internal) {
|
|
10
|
+
result = item.address
|
|
11
|
+
return true
|
|
12
|
+
}
|
|
13
|
+
return false
|
|
14
|
+
})
|
|
15
|
+
// 若获取到ip, 结束遍历
|
|
16
|
+
if (isEnd) {
|
|
17
|
+
break
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return result
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const PLAYGROUNDREPO = 'https://github.com/wuba/taro-playground'
|
|
24
|
+
|
|
25
|
+
export const PLAYGROUNDINFO = `use [Taro Playground App](${PLAYGROUNDREPO}) to scan`
|