Support RN ^0.31 inject server
This commit is contained in:
parent
a06aa21055
commit
fd114599e9
@ -1,19 +1,53 @@
|
|||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
|
var semver = require('semver');
|
||||||
|
|
||||||
var name = 'remotedev-server';
|
var name = 'remotedev-server';
|
||||||
var startFlag = '/* ' + name + ' start */';
|
var startFlag = '/* ' + name + ' start */';
|
||||||
var endFlag = '/* ' + name + ' end */';
|
var endFlag = '/* ' + name + ' end */';
|
||||||
var serverFlag = ' _server(argv, config, resolve, reject);';
|
var serverFlags = {
|
||||||
|
'react-native': {
|
||||||
|
'0.0.1': ' _server(argv, config, resolve, reject);',
|
||||||
|
'0.31.0': " runServer(args, config, () => console.log('\\nReact packager ready.\\n'));",
|
||||||
|
},
|
||||||
|
'react-native-desktop': {
|
||||||
|
'0.0.1': ' _server(argv, config, resolve, reject);',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
function getModuleVersion(modulePath) {
|
||||||
|
return JSON.parse(
|
||||||
|
fs.readFileSync(
|
||||||
|
path.join(modulePath, 'package.json'),
|
||||||
|
'utf-8'
|
||||||
|
)
|
||||||
|
).version;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getServerFlag(moduleName, version) {
|
||||||
|
var flags = serverFlags[moduleName || 'react-native'];
|
||||||
|
var versions = Object.keys(flags);
|
||||||
|
var flag;
|
||||||
|
for (var i = 0; i < versions.length; i++) {
|
||||||
|
if (semver.gt(version, versions[i])) {
|
||||||
|
flag = flags[versions[i]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return flag;
|
||||||
|
}
|
||||||
|
|
||||||
exports.dir = 'local-cli/server';
|
exports.dir = 'local-cli/server';
|
||||||
exports.file = 'server.js';
|
exports.file = 'server.js';
|
||||||
exports.fullPath = path.join(exports.dir, exports.file);
|
exports.fullPath = path.join(exports.dir, exports.file);
|
||||||
|
|
||||||
exports.inject = function(modulePath, options) {
|
exports.inject = function(modulePath, options, moduleName) {
|
||||||
var filePath = path.join(modulePath, exports.fullPath);
|
var filePath = path.join(modulePath, exports.fullPath);
|
||||||
if (!fs.existsSync(filePath)) return false;
|
if (!fs.existsSync(filePath)) return false;
|
||||||
|
|
||||||
|
var serverFlag = getServerFlag(
|
||||||
|
moduleName,
|
||||||
|
getModuleVersion(modulePath)
|
||||||
|
);
|
||||||
var code = [
|
var code = [
|
||||||
startFlag,
|
startFlag,
|
||||||
' require("' + name + '")(' + JSON.stringify(options) + ')',
|
' require("' + name + '")(' + JSON.stringify(options) + ')',
|
||||||
@ -40,10 +74,14 @@ exports.inject = function(modulePath, options) {
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.revert = function(modulePath) {
|
exports.revert = function(modulePath, moduleName) {
|
||||||
var filePath = path.join(modulePath, exports.fullPath);
|
var filePath = path.join(modulePath, exports.fullPath);
|
||||||
if (!fs.existsSync(filePath)) return false;
|
if (!fs.existsSync(filePath)) return false;
|
||||||
|
|
||||||
|
var serverFlag = getServerFlag(
|
||||||
|
moduleName,
|
||||||
|
getModuleVersion(modulePath)
|
||||||
|
);
|
||||||
var serverCode = fs.readFileSync(filePath, 'utf-8');
|
var serverCode = fs.readFileSync(filePath, 'utf-8');
|
||||||
var start = serverCode.indexOf(startFlag); // already injected ?
|
var start = serverCode.indexOf(startFlag); // already injected ?
|
||||||
var end = serverCode.indexOf(endFlag) + endFlag.length;
|
var end = serverCode.indexOf(endFlag) + endFlag.length;
|
||||||
|
@ -31,13 +31,16 @@ function getModuleName(type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getModulePath(type) {
|
function getModulePath(moduleName) {
|
||||||
var moduleName = getModuleName(type);
|
|
||||||
return path.join(process.cwd(), 'node_modules', moduleName);
|
return path.join(process.cwd(), 'node_modules', moduleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argv.revert) {
|
if (argv.revert) {
|
||||||
var pass = injectServer.revert(getModulePath(argv.revert));
|
var moduleName = getModuleName(argv.revert);
|
||||||
|
var pass = injectServer.revert(
|
||||||
|
getModulePath(moduleName),
|
||||||
|
moduleName
|
||||||
|
);
|
||||||
var msg = 'Revert injection of RemoteDev server from React Native local server';
|
var msg = 'Revert injection of RemoteDev server from React Native local server';
|
||||||
log(pass, msg + (!pass ? ', the file `' + injectServer.fullPath + '` not found.' : '.'));
|
log(pass, msg + (!pass ? ', the file `' + injectServer.fullPath + '` not found.' : '.'));
|
||||||
|
|
||||||
@ -46,7 +49,12 @@ if (argv.revert) {
|
|||||||
|
|
||||||
if (argv.injectserver) {
|
if (argv.injectserver) {
|
||||||
var options = getOptions(argv);
|
var options = getOptions(argv);
|
||||||
var pass = injectServer.inject(getModulePath(argv.injectserver), options);
|
var moduleName = getModuleName(argv.injectserver)
|
||||||
|
var pass = injectServer.inject(
|
||||||
|
getModulePath(moduleName),
|
||||||
|
options,
|
||||||
|
moduleName
|
||||||
|
);
|
||||||
var msg = 'Inject RemoteDev server into React Native local server';
|
var msg = 'Inject RemoteDev server into React Native local server';
|
||||||
log(pass, msg + (pass ? '.' : ', the file `' + injectServer.fullPath + '` not found.'));
|
log(pass, msg + (pass ? '.' : ', the file `' + injectServer.fullPath + '` not found.'));
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"object-assign": "^4.1.0",
|
"object-assign": "^4.1.0",
|
||||||
"repeat-string": "^1.5.4",
|
"repeat-string": "^1.5.4",
|
||||||
|
"semver": "^5.3.0",
|
||||||
"socketcluster": "^4.3.1"
|
"socketcluster": "^4.3.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user