Path: blob/main/assets/jbrowse/webpack.config.js
1677 views
/* eslint-env node */1require('babel-polyfill')23const DojoWebpackPlugin = require("dojo-webpack-plugin")4const CopyWebpackPlugin = require("copy-webpack-plugin")5const UglifyJsPlugin = require('uglifyjs-webpack-plugin')6const CleanWebpackPlugin = require('clean-webpack-plugin');78const path = require("path")9const glob = require('glob')10const webpack = require("webpack")1112// if JBROWSE_BUILD_MIN env var is 1 or true, then we also minimize the JS13// and forego generating source maps14const DEBUG = ! [1,'1','true'].includes(process.env.JBROWSE_BUILD_MIN)1516var webpackConf = {17entry: {18main: "src/JBrowse/main",19browser: "src/JBrowse/standalone"20},21plugins: [22new CleanWebpackPlugin(['dist']),2324new DojoWebpackPlugin({25loaderConfig: require("./build/dojo-loader-config"),26environment: {27dojoRoot: process.env.JBROWSE_PUBLIC_PATH || "./dist/"28},29buildEnvironment: {30dojoRoot: "node_modules/"31},32locales: ["en"],33loader: path.resolve('./build/dojo-webpack-plugin-loader/dojo/dojo.js')34}),3536new CopyWebpackPlugin([{37context: "node_modules",38from: "dojo/resources/blank.gif",39to: "dojo/resources"40}]),4142new webpack.NormalModuleReplacementPlugin(43/^dojox\/gfx\/renderer!/,44"dojox/gfx/canvas"45),4647new webpack.NormalModuleReplacementPlugin(/^dojo\/text!/, function(data) {48data.request = data.request.replace(/^dojo\/text!/, "!!raw-loader!");49}),5051new webpack.NormalModuleReplacementPlugin(52/^css!/, function(data) {53data.request = data.request.replace(/^css!/, "!style-loader!css-loader!sass-loader!")54}55),56],57module: {58rules: [59{60test: /\.js$/,61exclude: /node_modules\/(?!(quick-lru|@gmod\/indexedfasta|@gmod\/tabix|@gmod\/tribble-index|@gmod\/bgzf-filehandle))/,62use: {63loader: 'babel-loader',64options: {65presets: ['es2015-without-strict'],66plugins: ['transform-async-to-generator','transform-es2015-classes'],67cacheDirectory: true68}69}70},71{72test: /src\/JBrowse\/main.js|src\/JBrowse\/standalone.js|tests\/js_tests\/main.js/,73use: [{ loader: path.resolve('build/glob-loader.js') }]74},75{76test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/,77use: 'url-loader?limit=10000',78},79{80// regex replace all JBrowse plugin JS to just remove any use of dojo/domReady!81test: filepath => filepath.indexOf(__dirname+'/plugins')===0 && /\.js$/.test(filepath),82use: {83loader: 'regexp-replace-loader',84options: {85match: {86pattern: '["`\']dojo/domReady!?["\'`]\s*',87flags: 'g'88},89replaceWith: '"JBrowse/has"'90}91}92}93]94},95output: {96filename: '[name].bundle.js',97chunkFilename: '[name].bundle.js',98path: path.resolve(__dirname, 'dist'),99publicPath: process.env.JBROWSE_PUBLIC_PATH || 'dist/'100},101resolveLoader: {102modules: ["node_modules"]103},104resolve: {105symlinks: false106}107}108109if (DEBUG) {110webpackConf.mode = 'development'111webpackConf.entry.run_jasmine = 'tests/js_tests/main.js'112webpackConf.plugins.push( new webpack.optimize.AggressiveMergingPlugin() )113} else {114webpackConf.mode = 'production'115webpackConf.plugins.push( new UglifyJsPlugin())116}117118module.exports = webpackConf119120121