This commit is contained in:
syuilo 2018-03-15 12:56:50 +09:00
parent 2588e7ae9e
commit 45cb5cec04
5 changed files with 34 additions and 13 deletions

View file

@ -184,7 +184,6 @@
"typescript": "2.7.2", "typescript": "2.7.2",
"typescript-eslint-parser": "14.0.0", "typescript-eslint-parser": "14.0.0",
"uglify-es": "3.3.9", "uglify-es": "3.3.9",
"uglifyjs-webpack-plugin": "1.2.3",
"url-loader": "1.0.1", "url-loader": "1.0.1",
"uuid": "3.2.1", "uuid": "3.2.1",
"v-animate-css": "0.0.2", "v-animate-css": "0.0.2",

View file

@ -62,13 +62,17 @@
app = isMobile ? 'mobile' : 'desktop'; app = isMobile ? 'mobile' : 'desktop';
} }
// Script version
const ver = localStorage.getItem('v') || VERSION; const ver = localStorage.getItem('v') || VERSION;
// Whether use raw version script
const raw = localStorage.getItem('useRawScript') == 'true';
// Load an app script // Load an app script
// Note: 'async' make it possible to load the script asyncly. // Note: 'async' make it possible to load the script asyncly.
// 'defer' make it possible to run the script when the dom loaded. // 'defer' make it possible to run the script when the dom loaded.
const script = document.createElement('script'); const script = document.createElement('script');
script.setAttribute('src', `/assets/${app}.${ver}.${lang}.js`); script.setAttribute('src', `/assets/${app}.${ver}.${lang}.${raw ? 'raw' : 'min'}.js`);
script.setAttribute('async', 'true'); script.setAttribute('async', 'true');
script.setAttribute('defer', 'true'); script.setAttribute('defer', 'true');
head.appendChild(script); head.appendChild(script);

View file

@ -160,10 +160,13 @@
<section class="other" v-show="page == 'other'"> <section class="other" v-show="page == 'other'">
<h1>高度な設定</h1> <h1>高度な設定</h1>
<mk-switch v-model="debug" text="デバッグモードを有効にする"> <mk-switch v-model="debug" text="デバッグモードを有効にする">
<span>この設定はアカウントに保存されません</span> <span>この設定はブラウザに記憶されます</span>
</mk-switch> </mk-switch>
<mk-switch v-model="enableExperimental" text="実験的機能を有効にする"> <mk-switch v-model="enableExperimental" text="実験的機能を有効にする">
<span>この設定はアカウントに保存されません実験的機能を有効にするとMisskeyの動作が不安定になる可能性があります</span> <span>実験的機能を有効にするとMisskeyの動作が不安定になる可能性がありますこの設定はブラウザに記憶されます</span>
</mk-switch>
<mk-switch v-model="useRawScript" text="生のスクリプトを読み込む">
<span>圧縮されていない生のスクリプトを使用しますサイズが大きいため読み込みに時間がかかる場合がありますこの設定はブラウザに記憶されます</span>
</mk-switch> </mk-switch>
</section> </section>
@ -214,6 +217,7 @@ export default Vue.extend({
lang: localStorage.getItem('lang') || '', lang: localStorage.getItem('lang') || '',
preventUpdate: localStorage.getItem('preventUpdate') == 'true', preventUpdate: localStorage.getItem('preventUpdate') == 'true',
debug: localStorage.getItem('debug') == 'true', debug: localStorage.getItem('debug') == 'true',
useRawScript: localStorage.getItem('useRawScript') == 'true',
enableExperimental: localStorage.getItem('enableExperimental') == 'true' enableExperimental: localStorage.getItem('enableExperimental') == 'true'
}; };
}, },
@ -236,6 +240,9 @@ export default Vue.extend({
debug() { debug() {
localStorage.setItem('debug', this.debug ? 'true' : 'false'); localStorage.setItem('debug', this.debug ? 'true' : 'false');
}, },
useRawScript() {
localStorage.setItem('useRawScript', this.useRawScript ? 'true' : 'false');
},
enableExperimental() { enableExperimental() {
localStorage.setItem('enableExperimental', this.enableExperimental ? 'true' : 'false'); localStorage.setItem('enableExperimental', this.enableExperimental ? 'true' : 'false');
} }

View file

@ -13,6 +13,8 @@ if (yn) {
console.error(e); console.error(e);
} }
localStorage.removeItem('v');
location.reload(true); location.reload(true);
} else { } else {
alert('問題が解決しない場合はサーバー管理者までお問い合せください。'); alert('問題が解決しない場合はサーバー管理者までお問い合せください。');

View file

@ -6,7 +6,7 @@ import * as fs from 'fs';
import * as webpack from 'webpack'; import * as webpack from 'webpack';
import chalk from 'chalk'; import chalk from 'chalk';
import jsonImporter from 'node-sass-json-importer'; import jsonImporter from 'node-sass-json-importer';
const minify = require('html-minifier').minify; const minifyHtml = require('html-minifier').minify;
const WebpackOnBuildPlugin = require('on-build-webpack'); const WebpackOnBuildPlugin = require('on-build-webpack');
const HardSourceWebpackPlugin = require('hard-source-webpack-plugin'); const HardSourceWebpackPlugin = require('hard-source-webpack-plugin');
const ProgressBarPlugin = require('progress-bar-webpack-plugin'); const ProgressBarPlugin = require('progress-bar-webpack-plugin');
@ -17,7 +17,7 @@ const constants = require('./src/const.json');
import config from './src/conf'; import config from './src/conf';
import { licenseHtml } from './src/common/build/license'; import { licenseHtml } from './src/common/build/license';
import langs from './locales'; import locales from './locales';
const meta = require('./package.json'); const meta = require('./package.json');
const version = meta.version; const version = meta.version;
@ -28,7 +28,7 @@ const isProduction = env === 'production';
global['faReplacement'] = faReplacement; global['faReplacement'] = faReplacement;
global['collapseSpacesReplacement'] = html => { global['collapseSpacesReplacement'] = html => {
return minify(html, { return minifyHtml(html, {
collapseWhitespace: true, collapseWhitespace: true,
collapseInlineTagWhitespace: true, collapseInlineTagWhitespace: true,
keepClosingSlash: true keepClosingSlash: true
@ -40,7 +40,14 @@ global['base64replacement'] = (_, key) => {
}; };
//#endregion //#endregion
module.exports = Object.keys(langs).map(lang => { const langs = Object.keys(locales);
let entries = langs.map(l => [l, false]);
entries = entries.concat(langs.map(l => [l, true]));
module.exports = entries.map(x => {
const [lang, doMinify] = x;
// Chunk name // Chunk name
const name = lang; const name = lang;
@ -58,10 +65,10 @@ module.exports = Object.keys(langs).map(lang => {
const output = { const output = {
path: __dirname + '/built/web/assets', path: __dirname + '/built/web/assets',
filename: `[name].${version}.${lang}.js` filename: `[name].${version}.${lang}.${doMinify ? 'min' : 'raw'}.js`
}; };
const i18nReplacer = new I18nReplacer(lang); const i18nReplacer = new I18nReplacer(lang as string);
global['i18nReplacement'] = i18nReplacer.replacement; global['i18nReplacement'] = i18nReplacer.replacement;
//#region Define consts //#region Define consts
@ -110,9 +117,8 @@ module.exports = Object.keys(langs).map(lang => {
}) })
]; ];
if (isProduction) { if (doMinify) {
plugins.push(new webpack.optimize.ModuleConcatenationPlugin()); plugins.push(new webpack.optimize.ModuleConcatenationPlugin());
plugins.push(minify());
} }
return { return {
@ -235,6 +241,9 @@ module.exports = Object.keys(langs).map(lang => {
modules: ['node_modules', './webpack/loaders'] modules: ['node_modules', './webpack/loaders']
}, },
cache: true, cache: true,
devtool: 'source-map' devtool: 'source-map',
optimization: {
minimize: doMinify
}
}; };
}); });