73 lines
2.6 KiB
JavaScript
73 lines
2.6 KiB
JavaScript
const sqliteRemoteUrl = 'https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v4.0.4';
|
||
const sqliteFile = 'node-v64-win32-x64';
|
||
|
||
const path = require("path");
|
||
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 DisableOutputWebpackPlugin = require('disable-output-webpack-plugin');
|
||
const CopyWebpackPlugin = require('copy-webpack-plugin');
|
||
const EventHooksPlugin = require('event-hooks-webpack-plugin');
|
||
|
||
const distDir = path.resolve(__dirname, '../dist');
|
||
const publicDir = `${distDir}/tmp/public`;
|
||
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 = {
|
||
mode: 'production',
|
||
entry: `${publicDir}/index.html`,
|
||
output: {
|
||
path: outDir
|
||
},
|
||
module: {
|
||
rules: [
|
||
{
|
||
test: /\.html$/,
|
||
use: 'null-loader'
|
||
}
|
||
]
|
||
},
|
||
plugins: [
|
||
new CleanWebpackPlugin([outDir, tempDir], {root: distDir}),
|
||
new DisableOutputWebpackPlugin(),
|
||
new CopyWebpackPlugin([
|
||
{ 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}`);
|
||
});
|
||
});
|
||
}
|
||
})
|
||
]
|
||
};
|