Fix build
This commit is contained in:
parent
75920ba142
commit
60a8ed7af2
5 changed files with 2465 additions and 1661 deletions
|
@ -1,6 +1,6 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- "node"
|
||||
- "lts/*"
|
||||
|
||||
install: npm i
|
||||
|
||||
|
|
213
index.html
213
index.html
|
@ -1,29 +1,200 @@
|
|||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en_US">
|
||||
<head>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Vanity ETH | Ethereum vanity address generator</title>
|
||||
<meta property="og:title" content="Vanity ETH" />
|
||||
<meta property="og:locale" content="en_US" />
|
||||
<meta property="og:title" content="Vanity ETH">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<meta name="description" content="Vanity-ETH is an open source generator using your web browser to generate Ethereum
|
||||
vanity addresses. You can get a custom ETH vanity address right now without the need to install any software.
|
||||
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth." />
|
||||
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth.">
|
||||
<meta property="og:description" content="Vanity-ETH is an open source generator using your web browser to generate Ethereum
|
||||
vanity addresses. You can get a custom ETH vanity address right now without the need to install any software.
|
||||
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth." />
|
||||
<link rel="canonical" href="https://vanity-eth.tk/" />
|
||||
<meta property="og:url" content="https://vanity-eth.tk/" />
|
||||
<meta property="og:site_name" content="Vanity ETH" />
|
||||
<meta name="google-site-verification" content="DFWJVWz9IRrh-wjBxn0Y8ith5FTqMeJTSUtuJ595BEs" />
|
||||
<link rel="stylesheet" href="dist/style.css" />
|
||||
<link rel="icon" type="image/x-icon" href="dist/favicon.ico" />
|
||||
<script async defer data-domain="vanity-eth.tk" src="https://metrics.vanity-eth.tk/js/plausible.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="dist/index.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vanity-ETH provides an encrypted keystore compatible with MyEtherWallet, MetaMask, Mist, and geth.">
|
||||
<link rel="canonical" href="https://vanity-eth.tk/">
|
||||
<meta property="og:url" content="https://vanity-eth.tk/">
|
||||
<meta property="og:site_name" content="Vanity ETH">
|
||||
<meta name="google-site-verification" content="DFWJVWz9IRrh-wjBxn0Y8ith5FTqMeJTSUtuJ595BEs">
|
||||
<link rel="stylesheet" href="dist/style.css">
|
||||
<link rel="icon" type="image/x-icon" href="dist/favicon.ico">
|
||||
<script async="" defer="" data-domain="vanity-eth.tk" src="https://metrics.vanity-eth.tk/js/plausible.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app" class="remodal-bg prerender remodal-is-closed">
|
||||
<div id="content" class="container">
|
||||
<div data-v-105bd278>
|
||||
<h1 data-v-105bd278>VANITY-ETH</h1>
|
||||
<p data-v-105bd278>ETH vanity address generator</p>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div data-v-e4a11f84 class="panel">
|
||||
<p data-v-e4a11f84>
|
||||
Vanity-ETH is an open source tool using your web browser to generate Ethereum vanity addresses.<br data-v-e4a11f84>
|
||||
Enter a short prefix/suffix of your choice, and click ‘generate’ to start.
|
||||
</p>
|
||||
<div data-v-e4a11f84 class="shortcut"><button data-v-e4a11f84 type="button" class="button-large">Start now</button></div>
|
||||
<h2 data-v-e4a11f84>What's a vanity address?</h2>
|
||||
<p data-v-e4a11f84>
|
||||
A vanity address is an address which part of it is chosen by yourself, making it look less random.<br data-v-e4a11f84>
|
||||
Examples: <span data-v-e4a11f84 class="monospace">0xc0ffee254729296a45a3885639AC7E10F9d54979</span>, or
|
||||
<span data-v-e4a11f84 class="monospace">0x999999cf1046e68e36E1aA2E0E07105eDDD1f08E</span></p>
|
||||
<h2 data-v-e4a11f84>How it works</h2>
|
||||
<p data-v-e4a11f84>
|
||||
Enter the prefix/suffix of your choice, and click ‘generate’ to start. Your browser will generate lots of random
|
||||
addresses until one matches your input.<br data-v-e4a11f84>
|
||||
Once an address is found, you can reveal the private key, or click the 'save' button to download
|
||||
a password-encrypted keystore file.<br data-v-e4a11f84>
|
||||
You can increase the number of working threads to reach higher speeds, or decrease it if you computer
|
||||
struggles.<br data-v-e4a11f84></p>
|
||||
<h2 data-v-e4a11f84>Security</h2>
|
||||
<p data-v-e4a11f84>
|
||||
As explained above, everything is computed only in your browser. Nothing ever leaves your machine, or even
|
||||
your browser tab. There is no database, no server-side code. Everything vanishes when you close your tab.<br data-v-e4a11f84><br data-v-e4a11f84> <b data-v-e4a11f84>Vanity-ETH cannot and will never store your private key</b>, and if you don't trust it, you have 3 ways to ensure
|
||||
your key remains private:<br data-v-e4a11f84>
|
||||
- Once the web page is loaded, you can turn off the internet and continue playing, it will work seamlessly<br data-v-e4a11f84>
|
||||
- You can also download the latest build of Vanity-ETH
|
||||
<a data-v-e4a11f84 href="https://git.io/veth-dl" target="_blank">here</a> and use it on a completely offline computer<br data-v-e4a11f84>
|
||||
- The code is 100% open source and available on
|
||||
<a data-v-e4a11f84 href="https://github.com/bokub/vanity-eth" target="_blank">Github</a>. You can review it as much as you want before using it<br data-v-e4a11f84> <br data-v-e4a11f84>
|
||||
Vanity-ETH uses a cryptographically secure pseudorandom number generator (CSPRNG) to generate
|
||||
Ethereum addresses.<br data-v-e4a11f84>
|
||||
The keystore file is encrypted with a AES-128-CTR cipher using the BKDF2-SHA256 derivation function with 65536 hashing rounds.
|
||||
</p>
|
||||
<h2 data-v-e4a11f84>Performance</h2>
|
||||
<p data-v-e4a11f84>
|
||||
For some reason, the performance of Vanity-ETH can vary a lot from a browser to another.
|
||||
Currently, Chrome provides the best results.<br data-v-e4a11f84>
|
||||
Using Vanity-ETH on your phone or tablet will work, but don't expect to reach the speed of a good old computer.
|
||||
</p>
|
||||
<h2 data-v-e4a11f84>Compatibility</h2>
|
||||
<p data-v-e4a11f84>
|
||||
Any address generated with Vanity-ETH is ERC-20 compatible, which means you can use it for an ICO, an
|
||||
airdrop, or just to withdraw your funds from an exchange.<br data-v-e4a11f84>
|
||||
The keystore file is 100% compatible with MyEtherWallet, MetaMask, Mist, and geth.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!---->
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div data-v-9eac7f80 id="input-panel" class="panel">
|
||||
<form data-v-9eac7f80 class="">
|
||||
<div data-v-9eac7f80 class="error-text">Numbers and letters from A to F only</div> <input data-v-9eac7f80 type="text" id="input" placeholder="Prefix" class="text-input-large">
|
||||
<div data-v-9eac7f80 class="row justify-content-center hide-render">
|
||||
<div data-v-9eac7f80 class="spinner">
|
||||
<div data-v-9eac7f80></div>
|
||||
<div data-v-9eac7f80></div>
|
||||
<div data-v-9eac7f80></div>
|
||||
<div data-v-9eac7f80></div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-v-9eac7f80 class="example hide-prerender">
|
||||
E.g.
|
||||
<span data-v-9eac7f80 class="monospace">
|
||||
0x<b data-v-9eac7f80></b><span data-v-9eac7f80>f5bB3Ec3CBAe7A838B289CAE55DEd5C0daD22293</span>
|
||||
|
||||
<!----></span></div>
|
||||
<div data-v-9eac7f80 class="row controls hide-prerender">
|
||||
<div data-v-9eac7f80 class="col-12 col-sm-6 col-md-12 col-lg-6"><label data-v-9eac7f80 class="checkbox"><input data-v-9eac7f80 type="checkbox" name="checkbox" checked="checked"> <i data-v-9eac7f80 class="left"></i>
|
||||
Case-sensitive
|
||||
</label></div>
|
||||
<div data-v-9eac7f80 class="col-12 col-sm-6 col-md-12 col-lg-6"><span data-v-9eac7f80>Prefix</span> <label data-v-9eac7f80 class="switch"><input data-v-9eac7f80 type="checkbox"> <span data-v-9eac7f80 class="slider"></span></label> <span data-v-9eac7f80>Suffix</span></div>
|
||||
</div>
|
||||
<div data-v-9eac7f80 class="threads hide-prerender"><input data-v-9eac7f80 type="button" value="-" class="square-btn button-large"> <input data-v-9eac7f80 type="button" value="+" class="square-btn arrow button-large">
|
||||
<h4 data-v-9eac7f80>4</h4> <span data-v-9eac7f80>threads</span> <span data-v-9eac7f80>(recommended)</span>
|
||||
</div>
|
||||
<div data-v-9eac7f80 class="row">
|
||||
<div data-v-9eac7f80 class="col-lg-6 col-sm-12"><input data-v-9eac7f80 type="button" value="Generate" disabled="disabled" class="button-large hide-render"> <input data-v-9eac7f80 type="button" value="Generate" class="button-large hide-prerender"></div>
|
||||
<div data-v-9eac7f80 class="col-lg-6 col-sm-12"><input data-v-9eac7f80 type="button" value="Stop" disabled="disabled" class="button-large"></div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div data-v-3e599529 class="panel">
|
||||
<div data-v-3e599529>Difficulty: <span data-v-3e599529 class="output">1</span></div>
|
||||
<div data-v-3e599529>Generated: <span data-v-3e599529 class="output">0 addresses</span></div>
|
||||
<div data-v-3e599529>50% probability: <span data-v-3e599529 class="output">0 addresses</span></div>
|
||||
<div data-v-3e599529>Speed: <span data-v-3e599529 class="output">0 addr/s</span></div>
|
||||
<div data-v-3e599529>Status: <span data-v-3e599529 class="output">Waiting</span></div>
|
||||
<div data-v-3e599529 class="probability">
|
||||
<div data-v-3e599529 class="probability-bar" style="width: 0%;"></div>
|
||||
</div>
|
||||
<div data-v-3e599529 class="percentage">
|
||||
<h4 data-v-3e599529>0%</h4>
|
||||
<div data-v-3e599529>Probability</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div data-v-043d611f class="panel result">
|
||||
<div data-v-043d611f class="row">
|
||||
<div data-v-043d611f id="identicon" class="float-left"></div>
|
||||
<div data-v-043d611f class="col">
|
||||
<div data-v-043d611f>Address: <span data-v-043d611f class="output"></span></div>
|
||||
<div data-v-043d611f>Private key:
|
||||
|
||||
<!---->
|
||||
</div>
|
||||
</div>
|
||||
<div data-v-043d611f class="col-lg-2 col-12"><button data-v-043d611f data-remodal-target="modal" disabled="disabled" class="save button-large"><i data-v-043d611f class="icon-lock"></i> Save
|
||||
</button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer data-v-8ff20304>
|
||||
<div data-v-8ff20304 class="container">
|
||||
<div data-v-8ff20304 class="row">
|
||||
<div data-v-8ff20304 class="col-12 col-lg-6 address">
|
||||
Tips:
|
||||
<a data-v-8ff20304 href="https://etherscan.io/address/0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc#tokentxns" target="_blank">0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc</a></div>
|
||||
<div data-v-8ff20304 class="col-12 col-lg-6 links"><a data-v-8ff20304 href="https://etherdonation.com/d?to=0xAceBabe64807cb045505b268ef253D8fC2FeF5Bc" target="_blank"><i data-v-8ff20304 class="icon-ethereum"></i> Donate
|
||||
</a> <a data-v-8ff20304 href="https://github.com/bokub/vanity-eth" target="_blank"><i data-v-8ff20304 class="icon-star"></i> Star me
|
||||
</a> <a data-v-8ff20304 href="https://github.com/bokub/vanity-eth/wiki/download-Vanity-ETH" target="_blank"><i data-v-8ff20304 class="icon-download"></i> Download
|
||||
</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</footer> <a data-v-887f6dee href="https://github.com/bokub/vanity-eth" target="_blank" aria-label="View source on Github"><svg data-v-887f6dee width="80" height="80" viewBox="0 0 250 250" aria-hidden="true" style="fill: rgb(21, 21, 19); color: rgb(255, 255, 255); position: absolute; top: 0px; border: 0px; right: 0px;">
|
||||
<defs data-v-887f6dee>
|
||||
<mask data-v-887f6dee id="octomask">
|
||||
<path data-v-887f6dee fill="white" d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
|
||||
<path data-v-887f6dee fill="black" d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" class="octo-arm" style="transform-origin: 130px 106px;"></path>
|
||||
<path data-v-887f6dee d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="black" class="octo-body"></path>
|
||||
</mask>
|
||||
</defs>
|
||||
<rect data-v-887f6dee fill="white" width="100%" height="100%" mask="url(#octomask)" class="filler"></rect>
|
||||
</svg></a>
|
||||
</div>
|
||||
<script src="dist/index.js"></script>
|
||||
<div class="remodal-overlay remodal-is-closed" style="display: none;"></div>
|
||||
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
|
||||
</div>
|
||||
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
|
||||
<div data-remodal-id="modal" data-remodal-options="hashTracking: false" class="remodal remodal-is-initialized remodal-is-closed" tabindex="-1"><button data-remodal-action="close" class="remodal-close"></button>
|
||||
<h3 class="title">Create encrypted keystore file (UTC / JSON)</h3>
|
||||
<form>
|
||||
<div><input type="text" autocomplete="username" class="hidden"> <input type="password" autocomplete="new-password" placeholder="Password" class="text-input-large"></div>
|
||||
<div><button type="button" disabled="disabled" class="button-large">Download</button></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="remodal-wrapper remodal-is-closed" style="display: none;">
|
||||
<div data-remodal-id="modal" data-remodal-options="hashTracking: false" class="remodal remodal-is-initialized remodal-is-closed" tabindex="-1"><button data-remodal-action="close" class="remodal-close"></button>
|
||||
<h3 class="title">Create encrypted keystore file (UTC / JSON)</h3>
|
||||
<form>
|
||||
<div><input type="text" autocomplete="username" class="hidden"> <input type="password" autocomplete="new-password" placeholder="Password" class="text-input-large"></div>
|
||||
<div><button type="button" disabled="disabled" class="button-large">Download</button></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
3725
package-lock.json
generated
3725
package-lock.json
generated
File diff suppressed because it is too large
Load diff
10
package.json
10
package.json
|
@ -24,20 +24,20 @@
|
|||
"extract-text-webpack-plugin": "^3.0.2",
|
||||
"file-loader": "^1.1.6",
|
||||
"html-webpack-plugin": "^3.2.0",
|
||||
"keccak": "^1.4.0",
|
||||
"node-sass": "^4.5.3",
|
||||
"keccak": "^3.0.1",
|
||||
"node-sass": "^4.14.1",
|
||||
"pretty": "^2.0.0",
|
||||
"randombytes": "^2.0.6",
|
||||
"remodal": "^1.1.1",
|
||||
"sass-loader": "^6.0.6",
|
||||
"secp256k1": "^3.5.0",
|
||||
"secp256k1": "^3.8.0",
|
||||
"url-loader": "^0.6.2",
|
||||
"vue": "^2.5.11",
|
||||
"vue-eslint-parser": "^3.2.2",
|
||||
"vue-loader": "^13.0.5",
|
||||
"vue-template-compiler": "^2.4.4",
|
||||
"webpack": "^3.6.0",
|
||||
"webpack-dev-server": "^2.9.1",
|
||||
"webpack": "^3.12.0",
|
||||
"webpack-dev-server": "^2.11.5",
|
||||
"webpack-subresource-integrity": "^1.1.0-rc.5",
|
||||
"worker-loader": "^1.1.0"
|
||||
},
|
||||
|
|
|
@ -7,104 +7,104 @@ const SriPlugin = require('webpack-subresource-integrity');
|
|||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
|
||||
module.exports = {
|
||||
entry: {
|
||||
index: './src/main.js'
|
||||
},
|
||||
output: {
|
||||
crossOriginLoading: 'anonymous',
|
||||
path: path.resolve(__dirname, './dist'),
|
||||
publicPath: '/dist/',
|
||||
filename: '[name].js'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: {extractCSS: process.env.NODE_ENV === 'production'}
|
||||
},
|
||||
{
|
||||
test: /vanity\.js$/,
|
||||
loader: 'worker-loader',
|
||||
exclude: /node_modules/,
|
||||
options: {
|
||||
inline: true,
|
||||
name: 'vanity.js'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules/
|
||||
},
|
||||
{
|
||||
test: /\.(png|woff|woff2)/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'url-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
vue$: 'vue/dist/vue.esm.js'
|
||||
},
|
||||
extensions: ['*', '.js', '.vue', '.json']
|
||||
},
|
||||
devServer: {
|
||||
historyApiFallback: true,
|
||||
noInfo: true,
|
||||
overlay: true
|
||||
},
|
||||
performance: {
|
||||
hints: false
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': {
|
||||
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
||||
TID: JSON.stringify(process.env.TID)
|
||||
}
|
||||
}),
|
||||
new CopyWebpackPlugin([{
|
||||
from: 'src/assets/images/favicon.ico',
|
||||
to: '.',
|
||||
toType: 'dir'
|
||||
}])
|
||||
]
|
||||
entry: {
|
||||
index: './src/main.js'
|
||||
},
|
||||
output: {
|
||||
crossOriginLoading: 'anonymous',
|
||||
path: path.resolve(__dirname, './dist'),
|
||||
publicPath: '/dist/',
|
||||
filename: '[name].js'
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: {extractCSS: process.env.NODE_ENV === 'production'}
|
||||
},
|
||||
{
|
||||
test: /vanity\.js$/,
|
||||
loader: 'worker-loader',
|
||||
exclude: /node_modules/,
|
||||
options: {
|
||||
inline: true,
|
||||
name: 'vanity.js'
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
exclude: /node_modules(?!\/keccak)/
|
||||
},
|
||||
{
|
||||
test: /\.(png|woff|woff2)/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'url-loader'
|
||||
}
|
||||
]
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
vue$: 'vue/dist/vue.esm.js'
|
||||
},
|
||||
extensions: ['*', '.js', '.vue', '.json']
|
||||
},
|
||||
devServer: {
|
||||
historyApiFallback: true,
|
||||
noInfo: true,
|
||||
overlay: true
|
||||
},
|
||||
performance: {
|
||||
hints: false
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': {
|
||||
NODE_ENV: JSON.stringify(process.env.NODE_ENV),
|
||||
TID: JSON.stringify(process.env.TID)
|
||||
}
|
||||
}),
|
||||
new CopyWebpackPlugin([{
|
||||
from: 'src/assets/images/favicon.ico',
|
||||
to: '.',
|
||||
toType: 'dir'
|
||||
}])
|
||||
]
|
||||
};
|
||||
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
module.exports.plugins = module.exports.plugins.concat([
|
||||
new ExtractTextPlugin('style.css'),
|
||||
new webpack.optimize.UglifyJsPlugin({
|
||||
sourceMap: false,
|
||||
compress: {
|
||||
warnings: false
|
||||
}
|
||||
}),
|
||||
new HtmlWebpackPlugin({
|
||||
template: 'index.html',
|
||||
filename: '../index.html',
|
||||
inject: false
|
||||
}),
|
||||
]);
|
||||
module.exports.plugins = module.exports.plugins.concat([
|
||||
new ExtractTextPlugin('style.css'),
|
||||
new webpack.optimize.UglifyJsPlugin({
|
||||
sourceMap: false,
|
||||
compress: {
|
||||
warnings: false
|
||||
}
|
||||
}),
|
||||
new HtmlWebpackPlugin({
|
||||
template: 'index.html',
|
||||
filename: '../index.html',
|
||||
inject: false
|
||||
}),
|
||||
]);
|
||||
}
|
||||
|
||||
if (process.env.DEPLOY) {
|
||||
const SpaPlugin = require('prerender-spa-plugin');
|
||||
const SpaPlugin = require('prerender-spa-plugin');
|
||||
module.exports.plugins = module.exports.plugins.concat([
|
||||
new SriPlugin({
|
||||
hashFuncNames: ['sha256', 'sha384']
|
||||
hashFuncNames: ['sha256', 'sha384']
|
||||
}),
|
||||
new SpaPlugin({
|
||||
staticDir: path.join(__dirname),
|
||||
routes: ['/'],
|
||||
postProcess(renderedRoute) {
|
||||
renderedRoute.html = pretty(renderedRoute.html, {ocd: true})
|
||||
.replace('render', 'prerender')
|
||||
.replace(/(data-v-[0-9a-f]+)=""/gm, '$1');
|
||||
return renderedRoute;
|
||||
}
|
||||
staticDir: path.join(__dirname),
|
||||
routes: ['/'],
|
||||
postProcess(renderedRoute) {
|
||||
renderedRoute.html = pretty(renderedRoute.html, {ocd: true})
|
||||
.replace('render', 'prerender')
|
||||
.replace(/(data-v-[0-9a-f]+)=""/gm, '$1');
|
||||
return renderedRoute;
|
||||
}
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue