|
|
|
const webpack = require('webpack');
|
|
|
|
const path = require('path');
|
|
|
|
const fs = require('fs');
|
|
|
|
|
|
|
|
var base = require('./webpack.base.conf');
|
|
|
|
|
|
|
|
const TARGET_NODE_VERSION = process.versions.node;
|
|
|
|
const PLATFORM = `${process.platform}-${process.arch}-node-${TARGET_NODE_VERSION.split('.')[0]}`;
|
|
|
|
|
|
|
|
console.log(`Target node version: ${TARGET_NODE_VERSION}`);
|
|
|
|
console.log(`Platform: ${PLATFORM}`);
|
|
|
|
|
|
|
|
|
|
|
|
const DEASYNC_NODE_MODULES_PATH = path.resolve(
|
|
|
|
'node_modules',
|
|
|
|
'deasync',
|
|
|
|
'bin',
|
|
|
|
PLATFORM
|
|
|
|
);
|
|
|
|
|
|
|
|
const DEASYNC_DIST_PATH = path.resolve('dist', 'bin', PLATFORM);
|
|
|
|
|
|
|
|
if(!fs.existsSync(DEASYNC_NODE_MODULES_PATH)) {
|
|
|
|
throw new Error(`deasync doesn't support this platform: ${PLATFORM}`);
|
|
|
|
}
|
|
|
|
|
|
|
|
base.mode = 'production';
|
|
|
|
base.output.filename = "server.js";
|
|
|
|
base.optimization.minimize = true;
|
|
|
|
|
|
|
|
base.externals = base.externals ? base.externals : [];
|
|
|
|
base.externals.push(
|
|
|
|
function (context, request, callback) {
|
|
|
|
if(request.indexOf('bindings') === 0) {
|
|
|
|
callback(null, `() => require('./deasync.node')`)
|
|
|
|
} else {
|
|
|
|
callback();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
const prodRules = [
|
|
|
|
{
|
|
|
|
test: /\.js$/,
|
|
|
|
use: {
|
|
|
|
loader: 'babel-loader',
|
|
|
|
options: {
|
|
|
|
presets: [
|
|
|
|
["env", {
|
|
|
|
"targets": {
|
|
|
|
"node": TARGET_NODE_VERSION
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
{
|
|
|
|
test: /\.node$/,
|
|
|
|
use: [
|
|
|
|
{ loader: './build/node-loader' },
|
|
|
|
{ loader: 'file-loader', options: { name: '[name].[ext]' } }
|
|
|
|
]
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
let contextPathMapping = {};
|
|
|
|
contextPathMapping[path.resolve(DEASYNC_DIST_PATH, 'deasync')] = './deasync.node';
|
|
|
|
|
|
|
|
const prodPlugins = [
|
|
|
|
new webpack.ContextReplacementPlugin(
|
|
|
|
/deasync/,
|
|
|
|
DEASYNC_NODE_MODULES_PATH,
|
|
|
|
contextPathMapping
|
|
|
|
)
|
|
|
|
];
|
|
|
|
|
|
|
|
base.module.rules = [...base.module.rules, ...prodRules];
|
|
|
|
base.plugins = [...base.plugins, ...prodPlugins];
|
|
|
|
|
|
|
|
module.exports = base;
|