Forked from
David Hamelin / jscoq-light
367 commits behind the upstream repository.
-
Shachar Itzhaky authored
So that we can create both jsCoq and waCoq packages.
Shachar Itzhaky authoredSo that we can create both jsCoq and waCoq packages.
webpack.config.js 3.38 KiB
const webpack = require('webpack'),
fs = require('fs'),
path = require('path'),
{ VueLoaderPlugin } = require('vue-loader');
module.exports = (env, argv) => [
/**
* jsCoq CLI
* (note: the waCoq CLI is located in package `wacoq-bin`)
*/
{
name: 'cli',
target: 'node',
entry: './coq-jslib/cli.ts',
mode: 'development',
devtool: argv.mode !== 'production' ? "source-map" : undefined,
stats: {
hash: false, version: false, modules: false // reduce verbosity
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
externals: { /* do not bundle the worker */
'./coq-js/jscoq_worker.bc.js': 'commonjs2 ./coq-js/jscoq_worker.bc.js',
'wacoq-bin/dist/subproc': 'commonjs2'
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
},
output: {
filename: 'cli.js',
path: path.join(__dirname, 'dist')
},
plugins: [
new webpack.BannerPlugin({banner: '#!/usr/bin/env node', raw: true}),
new webpack.optimize.LimitChunkCountPlugin({maxChunks: 1}),
function() {
this.hooks.afterDone.tap('chmod', () => fs.chmodSync('dist/cli.js', 0755));
}
],
node: false
},
/**
* Multi-file Project UI
*/
{
name: 'ide-project',
mode: 'development',
entry: './ui-js/ide-project.js',
devtool: argv.mode !== 'production' ? "source-map" : undefined,
stats: {
hash: false, version: false, modules: false // reduce verbosity
},
performance: {
maxAssetSize: 1e6, maxEntrypointSize: 1e6 // 250k is too small
},
output: {
filename: 'ide-project.browser.js',
path: path.join(__dirname, 'dist'),
library: 'ideProject',
libraryTarget: 'umd'
},
externals: {
fs: 'commonjs2 fs', child_process: 'commonjs2 child_process',
'wacoq-bin/dist/subproc': 'commonjs2'
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /\.scss$/i, /* Vue.js has some */
use: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.(png|jpe?g|gif)$/i,
loader: 'file-loader',
options: {
outputPath: 'ide-project-images',
}
},
{
test: /\.vue$/,
use: 'vue-loader'
}
],
},
resolve: {
extensions: [ '.tsx', '.ts', '.js' ],
fallback: { "stream": require.resolve("stream-browserify") }
},
plugins: [new VueLoaderPlugin(),
new webpack.ProvidePlugin({process: 'process/browser'})]
},
/**
* Collaboration plugin
* (Hastebin)
*/
{
name: 'collab',
mode: 'development',
entry: './ui-js/addon/collab.js',
devtool: argv.mode !== 'production' ? "source-map" : undefined,
stats: {
hash: false, version: false, modules: false // reduce verbosity
},
performance: {
maxAssetSize: 1e6, maxEntrypointSize: 1e6 // 250k is too small
},
output: {
filename: 'collab.browser.js',
path: path.join(__dirname, 'dist/addon'),
library: 'addonCollab',
libraryTarget: 'umd'
},
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
{
test: /\.(png|jpe?g|gif)$/i,
loader: 'file-loader',
options: {
outputPath: 'collab-images',
}
}
]
}
}
];