mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-02-10 22:45:24 +08:00
[react-packager] Introduce buildPackage API
This commit is contained in:
35
packager/react-packager/index.js
vendored
35
packager/react-packager/index.js
vendored
@@ -18,14 +18,17 @@ exports.middleware = function(options) {
|
||||
return server.processRequest.bind(server);
|
||||
};
|
||||
|
||||
exports.buildPackageFromUrl = function(options, reqUrl) {
|
||||
Activity.disable();
|
||||
// Don't start the filewatcher or the cache.
|
||||
if (options.nonPersistent == null) {
|
||||
options.nonPersistent = true;
|
||||
}
|
||||
exports.buildPackage = function(options, packageOptions) {
|
||||
var server = createServer(options);
|
||||
return server.buildPackage(packageOptions)
|
||||
.then(function(p) {
|
||||
server.end();
|
||||
return p;
|
||||
});
|
||||
};
|
||||
|
||||
var server = new Server(options);
|
||||
exports.buildPackageFromUrl = function(options, reqUrl) {
|
||||
var server = createServer(options);
|
||||
return server.buildPackageFromUrl(reqUrl)
|
||||
.then(function(p) {
|
||||
server.end();
|
||||
@@ -34,13 +37,7 @@ exports.buildPackageFromUrl = function(options, reqUrl) {
|
||||
};
|
||||
|
||||
exports.getDependencies = function(options, main) {
|
||||
Activity.disable();
|
||||
// Don't start the filewatcher or the cache.
|
||||
if (options.nonPersistent == null) {
|
||||
options.nonPersistent = true;
|
||||
}
|
||||
|
||||
var server = new Server(options);
|
||||
var server = createServer(options);
|
||||
return server.getDependencies(main)
|
||||
.then(function(r) {
|
||||
server.end();
|
||||
@@ -60,3 +57,13 @@ function useGracefulFs() {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function createServer(options) {
|
||||
Activity.disable();
|
||||
// Don't start the filewatcher or the cache.
|
||||
if (options.nonPersistent == null) {
|
||||
options.nonPersistent = true;
|
||||
}
|
||||
|
||||
return new Server(options);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@ var ModuleTransport = require('../lib/ModuleTransport');
|
||||
|
||||
module.exports = Package;
|
||||
|
||||
var SOURCEMAPPING_URL = '\n\/\/@ sourceMappingURL=';
|
||||
|
||||
function Package(sourceMapUrl) {
|
||||
this._finalized = false;
|
||||
this._modules = [];
|
||||
@@ -96,12 +98,11 @@ Package.prototype.getSource = function(options) {
|
||||
}
|
||||
|
||||
var source = this._getSource();
|
||||
source += '\n\/\/@ sourceMappingURL=';
|
||||
|
||||
if (options.inlineSourceMap) {
|
||||
source += this._getInlineSourceMap();
|
||||
} else {
|
||||
source += this._sourceMapUrl;
|
||||
source += SOURCEMAPPING_URL + this._getInlineSourceMap();
|
||||
} else if (this._sourceMapUrl) {
|
||||
source += SOURCEMAPPING_URL + this._sourceMapUrl;
|
||||
}
|
||||
|
||||
return source;
|
||||
|
||||
@@ -47,6 +47,26 @@ describe('Package', function() {
|
||||
].join('\n'));
|
||||
});
|
||||
|
||||
it('should be ok to leave out the source map url', function() {
|
||||
var p = new Package();
|
||||
p.addModule(new ModuleTransport({
|
||||
code: 'transformed foo;',
|
||||
sourceCode: 'source foo',
|
||||
sourcePath: 'foo path',
|
||||
}));
|
||||
p.addModule(new ModuleTransport({
|
||||
code: 'transformed bar;',
|
||||
sourceCode: 'source bar',
|
||||
sourcePath: 'bar path',
|
||||
}));
|
||||
|
||||
p.finalize({});
|
||||
expect(p.getSource()).toBe([
|
||||
'transformed foo;',
|
||||
'transformed bar;',
|
||||
].join('\n'));
|
||||
});
|
||||
|
||||
it('should create a package and add run module code', function() {
|
||||
ppackage.addModule(new ModuleTransport({
|
||||
code: 'transformed foo;',
|
||||
|
||||
@@ -230,7 +230,7 @@ describe('processRequest', function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe.only('/assets endpoint', function() {
|
||||
describe('/assets endpoint', function() {
|
||||
var AssetServer;
|
||||
beforeEach(function() {
|
||||
AssetServer = require('../../AssetServer');
|
||||
@@ -257,4 +257,30 @@ describe('processRequest', function() {
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
describe('buildPackage(options)', function() {
|
||||
it('Calls the packager with the correct args', function() {
|
||||
server.buildPackage({
|
||||
entryFile: 'foo file'
|
||||
});
|
||||
expect(Packager.prototype.package).toBeCalledWith(
|
||||
'foo file',
|
||||
true,
|
||||
undefined,
|
||||
true
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('buildPackageFromUrl(options)', function() {
|
||||
it('Calls the packager with the correct args', function() {
|
||||
server.buildPackageFromUrl('/path/to/foo.bundle?dev=false&runModule=false');
|
||||
expect(Packager.prototype.package).toBeCalledWith(
|
||||
'path/to/foo.js',
|
||||
false,
|
||||
'/path/to/foo.map',
|
||||
false
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
47
packager/react-packager/src/Server/index.js
vendored
47
packager/react-packager/src/Server/index.js
vendored
@@ -129,7 +129,7 @@ Server.prototype._onFileChange = function(type, filepath, root) {
|
||||
};
|
||||
|
||||
Server.prototype._rebuildPackages = function() {
|
||||
var buildPackage = this._buildPackage.bind(this);
|
||||
var buildPackage = this.buildPackage.bind(this);
|
||||
var packages = this._packages;
|
||||
Object.keys(packages).forEach(function(key) {
|
||||
var options = getOptionsFromUrl(key);
|
||||
@@ -171,18 +171,47 @@ Server.prototype.end = function() {
|
||||
]);
|
||||
};
|
||||
|
||||
Server.prototype._buildPackage = function(options) {
|
||||
var packageOpts = declareOpts({
|
||||
sourceMapUrl: {
|
||||
type: 'string',
|
||||
required: false,
|
||||
},
|
||||
entryFile: {
|
||||
type: 'string',
|
||||
required: true,
|
||||
},
|
||||
dev: {
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
minify: {
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
},
|
||||
runModule: {
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
},
|
||||
inlineSourceMap: {
|
||||
type: 'boolean',
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
|
||||
Server.prototype.buildPackage = function(options) {
|
||||
var opts = packageOpts(options);
|
||||
|
||||
return this._packager.package(
|
||||
options.main,
|
||||
options.runModule,
|
||||
options.sourceMapUrl,
|
||||
options.dev
|
||||
opts.entryFile,
|
||||
opts.runModule,
|
||||
opts.sourceMapUrl,
|
||||
opts.dev
|
||||
);
|
||||
};
|
||||
|
||||
Server.prototype.buildPackageFromUrl = function(reqUrl) {
|
||||
var options = getOptionsFromUrl(reqUrl);
|
||||
return this._buildPackage(options);
|
||||
return this.buildPackage(options);
|
||||
};
|
||||
|
||||
Server.prototype.getDependencies = function(main) {
|
||||
@@ -321,7 +350,7 @@ Server.prototype.processRequest = function(req, res, next) {
|
||||
|
||||
var startReqEventId = Activity.startEvent('request:' + req.url);
|
||||
var options = getOptionsFromUrl(req.url);
|
||||
var building = this._packages[req.url] || this._buildPackage(options);
|
||||
var building = this._packages[req.url] || this.buildPackage(options);
|
||||
|
||||
this._packages[req.url] = building;
|
||||
building.then(
|
||||
@@ -363,7 +392,7 @@ function getOptionsFromUrl(reqUrl) {
|
||||
|
||||
return {
|
||||
sourceMapUrl: pathname.replace(/\.bundle$/, '.map'),
|
||||
main: entryFile,
|
||||
entryFile: entryFile,
|
||||
dev: getBoolOptionFromQuery(urlObj.query, 'dev', true),
|
||||
minify: getBoolOptionFromQuery(urlObj.query, 'minify'),
|
||||
runModule: getBoolOptionFromQuery(urlObj.query, 'runModule', true),
|
||||
|
||||
Reference in New Issue
Block a user