Skip to content

Commit

Permalink
[build] 2.3.0-beta.1
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Apr 26, 2017
1 parent cb0531c commit 56b6f8a
Show file tree
Hide file tree
Showing 14 changed files with 11,964 additions and 14,065 deletions.
1,472 changes: 883 additions & 589 deletions dist/vue.common.js

Large diffs are not rendered by default.

1,472 changes: 883 additions & 589 deletions dist/vue.esm.js

Large diffs are not rendered by default.

1,428 changes: 860 additions & 568 deletions dist/vue.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions dist/vue.min.js

Large diffs are not rendered by default.

1,439 changes: 846 additions & 593 deletions dist/vue.runtime.common.js

Large diffs are not rendered by default.

1,439 changes: 846 additions & 593 deletions dist/vue.runtime.esm.js

Large diffs are not rendered by default.

1,435 changes: 843 additions & 592 deletions dist/vue.runtime.js

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions dist/vue.runtime.min.js

Large diffs are not rendered by default.

9,960 changes: 4,331 additions & 5,629 deletions packages/vue-server-renderer/build.js

Large diffs are not rendered by default.

82 changes: 82 additions & 0 deletions packages/vue-server-renderer/client-plugin.js
@@ -0,0 +1,82 @@
'use strict';

/* */

var isJS = function (file) { return /\.js(\?[^.]+)?$/.test(file); };

var ref = require('chalk');
var red = ref.red;
var yellow = ref.yellow;

var prefix = "[vue-server-renderer-webpack-plugin]";
var warn = exports.warn = function (msg) { return console.error(red((prefix + " " + msg + "\n"))); };
var tip = exports.tip = function (msg) { return console.log(yellow((prefix + " " + msg + "\n"))); };

var hash = require('hash-sum');
var VueSSRClientPlugin = function VueSSRClientPlugin (options) {
if ( options === void 0 ) options = {};

this.options = Object.assign({
filename: 'vue-ssr-client-manifest.json'
}, options);
};

VueSSRClientPlugin.prototype.apply = function apply (compiler) {
var this$1 = this;

compiler.plugin('emit', function (compilation, cb) {
var stats = compilation.getStats().toJson();

var allFiles = stats.assets
.map(function (a) { return a.name; });

var initialFiles = Object.keys(stats.entrypoints)
.map(function (name) { return stats.entrypoints[name].assets; })
.reduce(function (assets, all) { return all.concat(assets); }, [])
.filter(isJS);

var asyncFiles = allFiles
.filter(isJS)
.filter(function (file) { return initialFiles.indexOf(file) < 0; });

var manifest = {
publicPath: stats.publicPath,
all: allFiles,
initial: initialFiles,
async: asyncFiles,
modules: { /* [identifier: string]: Array<index: number> */ }
};

var assetModules = stats.modules.filter(function (m) { return m.assets.length; });
var fileToIndex = function (file) { return manifest.all.indexOf(file); };
stats.modules.forEach(function (m) {
// ignore modules duplicated in multiple chunks
if (m.chunks.length === 1) {
var cid = m.chunks[0];
var chunk = stats.chunks.find(function (c) { return c.id === cid; });
var files = manifest.modules[hash(m.identifier)] = chunk.files.map(fileToIndex);
// find all asset modules associated with the same chunk
assetModules.forEach(function (m) {
if (m.chunks.some(function (id) { return id === cid; })) {
files.push.apply(files, m.assets.map(fileToIndex));
}
});
}
});

// const debug = (file, obj) => {
// require('fs').writeFileSync(__dirname + '/' + file, JSON.stringify(obj, null, 2))
// }
// debug('stats.json', stats)
// debug('client-manifest.json', manifest)

var json = JSON.stringify(manifest, null, 2);
compilation.assets[this$1.options.filename] = {
source: function () { return json; },
size: function () { return json.length; }
};
cb();
});
};

module.exports = VueSSRClientPlugin;
2 changes: 1 addition & 1 deletion packages/vue-server-renderer/package.json
@@ -1,6 +1,6 @@
{
"name": "vue-server-renderer",
"version": "2.2.6",
"version": "2.3.0-beta.1",
"description": "server renderer for Vue 2.0",
"main": "index.js",
"repository": {
Expand Down
92 changes: 92 additions & 0 deletions packages/vue-server-renderer/server-plugin.js
@@ -0,0 +1,92 @@
'use strict';

/* */

var isJS = function (file) { return /\.js(\?[^.]+)?$/.test(file); };

var ref = require('chalk');
var red = ref.red;
var yellow = ref.yellow;

var prefix = "[vue-server-renderer-webpack-plugin]";
var warn = exports.warn = function (msg) { return console.error(red((prefix + " " + msg + "\n"))); };
var tip = exports.tip = function (msg) { return console.log(yellow((prefix + " " + msg + "\n"))); };

var validate = function (compiler) {
if (compiler.options.target !== 'node') {
warn('webpack config `target` should be "node".');
}

if (compiler.options.output && compiler.options.output.libraryTarget !== 'commonjs2') {
warn('webpack config `output.libraryTarget` should be "commonjs2".');
}

if (!compiler.options.externals) {
tip(
'It is recommended to externalize dependencies in the server build for ' +
'better build performance.'
);
}
};

var VueSSRServerPlugin = function VueSSRServerPlugin (options) {
if ( options === void 0 ) options = {};

this.options = Object.assign({
filename: 'vue-ssr-server-bundle.json'
}, options);
};

VueSSRServerPlugin.prototype.apply = function apply (compiler) {
var this$1 = this;

validate(compiler);

compiler.plugin('emit', function (compilation, cb) {
var stats = compilation.getStats().toJson();
var entryName = Object.keys(stats.entrypoints)[0];
var entryAssets = stats.entrypoints[entryName].assets.filter(isJS);

if (entryAssets.length > 1) {
throw new Error(
"Server-side bundle should have one single entry file. " +
"Avoid using CommonsChunkPlugin in the server config."
)
}

var entry = entryAssets[0];
if (!entry || typeof entry !== 'string') {
throw new Error(
("Entry \"" + entryName + "\" not found. Did you specify the correct entry option?")
)
}

var bundle = {
entry: entry,
files: {},
maps: {}
};

stats.assets.forEach(function (asset) {
if (asset.name.match(/\.js$/)) {
bundle.files[asset.name] = compilation.assets[asset.name].source();
} else if (asset.name.match(/\.js\.map$/)) {
bundle.maps[asset.name.replace(/\.map$/, '')] = JSON.parse(compilation.assets[asset.name].source());
}
// do not emit anything else for server
delete compilation.assets[asset.name];
});

var json = JSON.stringify(bundle, null, 2);
var filename = this$1.options.filename;

compilation.assets[filename] = {
source: function () { return json; },
size: function () { return json.length; }
};

cb();
});
};

module.exports = VueSSRServerPlugin;

0 comments on commit 56b6f8a

Please sign in to comment.