|
@@ -1,16 +1,31 @@
|
|
|
|
+const sqliteRemoteUrl = 'https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.0.4';
|
|
|
|
+const sqliteFile = 'node-v64-win32-x64';
|
|
|
|
+
|
|
const path = require("path");
|
|
const path = require("path");
|
|
const webpack = require("webpack");
|
|
const webpack = require("webpack");
|
|
|
|
|
|
|
|
+const fs = require('fs');
|
|
|
|
+const download = require('download');
|
|
|
|
+const decompress = require('decompress');
|
|
|
|
+const decompressTargz = require('decompress-targz');
|
|
|
|
+
|
|
const CleanWebpackPlugin = require('clean-webpack-plugin');
|
|
const CleanWebpackPlugin = require('clean-webpack-plugin');
|
|
const DisableOutputWebpackPlugin = require('disable-output-webpack-plugin');
|
|
const DisableOutputWebpackPlugin = require('disable-output-webpack-plugin');
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
|
|
|
+const EventHooksPlugin = require('event-hooks-webpack-plugin');
|
|
|
|
|
|
const distDir = path.resolve(__dirname, '../dist');
|
|
const distDir = path.resolve(__dirname, '../dist');
|
|
|
|
+const publicDir = `${distDir}/tmp/public`;
|
|
const outDir = `${distDir}/win`;
|
|
const outDir = `${distDir}/win`;
|
|
|
|
|
|
|
|
+const sqliteFilename = `${sqliteFile}.tar.gz`;
|
|
|
|
+const tempDir = `${distDir}/tmp/sqlite`;
|
|
|
|
+const sqliteDecompressedFilename = `${tempDir}/${sqliteFile}/node_sqlite3.node`;
|
|
|
|
+const sqliteDistFilename = `${outDir}/node_sqlite3.node`;
|
|
|
|
+
|
|
module.exports = {
|
|
module.exports = {
|
|
mode: 'production',
|
|
mode: 'production',
|
|
- entry: `${distDir}/public/index.html`,
|
|
|
|
|
|
+ entry: `${publicDir}/index.html`,
|
|
output: {
|
|
output: {
|
|
path: outDir
|
|
path: outDir
|
|
},
|
|
},
|
|
@@ -23,11 +38,35 @@ module.exports = {
|
|
]
|
|
]
|
|
},
|
|
},
|
|
plugins: [
|
|
plugins: [
|
|
- new CleanWebpackPlugin([outDir], {root: distDir}),
|
|
|
|
|
|
+ new CleanWebpackPlugin([outDir, tempDir], {root: distDir}),
|
|
new DisableOutputWebpackPlugin(),
|
|
new DisableOutputWebpackPlugin(),
|
|
new CopyWebpackPlugin([
|
|
new CopyWebpackPlugin([
|
|
- { from: `${distDir}/public`, to: `${outDir}/public` }
|
|
|
|
|
|
+ { from: publicDir, to: `${outDir}/public` }
|
|
]
|
|
]
|
|
),
|
|
),
|
|
|
|
+ new EventHooksPlugin({
|
|
|
|
+ done: () => {
|
|
|
|
+ // Скачиваем node_sqlite3.node для винды, т.к. pkg не включает его в сборку
|
|
|
|
+ const url = `${sqliteRemoteUrl}/${sqliteFilename}`;
|
|
|
|
+ fs.mkdirSync(tempDir);
|
|
|
|
+ const d = download(url);
|
|
|
|
+ d.pipe(fs.createWriteStream(`${tempDir}/${sqliteFilename}`));
|
|
|
|
+ d.on('end', () => {
|
|
|
|
+ console.log(`downloading ${url} done`);
|
|
|
|
+
|
|
|
|
+ //распаковываем
|
|
|
|
+ decompress(`${tempDir}/${sqliteFilename}`, `${tempDir}`, {
|
|
|
|
+ plugins: [
|
|
|
|
+ decompressTargz()
|
|
|
|
+ ]
|
|
|
|
+ }).then(() => {
|
|
|
|
+ console.log('files decompressed');
|
|
|
|
+ // копируем в дистрибутив
|
|
|
|
+ fs.copyFileSync(sqliteDecompressedFilename, sqliteDistFilename);
|
|
|
|
+ console.log(`copied ${sqliteDecompressedFilename} to ${sqliteDistFilename}`);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ })
|
|
]
|
|
]
|
|
};
|
|
};
|