mirror of
https://github.com/nasa/openmct.git
synced 2024-12-19 05:07:52 +00:00
177 lines
5.6 KiB
JavaScript
177 lines
5.6 KiB
JavaScript
/* global __dirname module */
|
|
|
|
/*
|
|
This is the OpenMCT common webpack file. It is imported by the other three webpack configurations:
|
|
- webpack.prod.js - the production configuration for OpenMCT (default)
|
|
- webpack.dev.js - the development configuration for OpenMCT
|
|
- webpack.coverage.js - imports webpack.dev.js and adds code coverage
|
|
There are separate npm scripts to use these configurations, though simply running `npm install`
|
|
will use the default production configuration.
|
|
*/
|
|
const path = require("path");
|
|
const packageDefinition = require("../package.json");
|
|
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
|
const webpack = require("webpack");
|
|
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
|
|
|
|
const { VueLoaderPlugin } = require("vue-loader");
|
|
let gitRevision = "error-retrieving-revision";
|
|
let gitBranch = "error-retrieving-branch";
|
|
|
|
try {
|
|
gitRevision = require("child_process")
|
|
.execSync("git rev-parse HEAD")
|
|
.toString()
|
|
.trim();
|
|
gitBranch = require("child_process")
|
|
.execSync("git rev-parse --abbrev-ref HEAD")
|
|
.toString()
|
|
.trim();
|
|
} catch (err) {
|
|
console.warn(err);
|
|
}
|
|
|
|
/** @type {import('webpack').Configuration} */
|
|
const config = {
|
|
context: path.join(__dirname, ".."),
|
|
entry: {
|
|
openmct: "./openmct.js",
|
|
generatorWorker: "./example/generator/generatorWorker.js",
|
|
couchDBChangesFeed:
|
|
"./src/plugins/persistence/couch/CouchChangesFeed.js",
|
|
inMemorySearchWorker: "./src/api/objects/InMemorySearchWorker.js",
|
|
espressoTheme: "./src/plugins/themes/espresso-theme.scss",
|
|
snowTheme: "./src/plugins/themes/snow-theme.scss"
|
|
},
|
|
output: {
|
|
globalObject: "this",
|
|
filename: "[name].js",
|
|
path: path.resolve(__dirname, "..", "dist"),
|
|
library: "openmct",
|
|
libraryTarget: "umd",
|
|
publicPath: "",
|
|
hashFunction: "xxhash64",
|
|
clean: true
|
|
},
|
|
resolve: {
|
|
alias: {
|
|
"@": path.join(__dirname, "..", "src"),
|
|
legacyRegistry: path.join(__dirname, "..", "src/legacyRegistry"),
|
|
saveAs: "file-saver/src/FileSaver.js",
|
|
csv: "comma-separated-values",
|
|
EventEmitter: "eventemitter3",
|
|
bourbon: "bourbon.scss",
|
|
"plotly-basic": "plotly.js-basic-dist",
|
|
"plotly-gl2d": "plotly.js-gl2d-dist",
|
|
"d3-scale": path.join(
|
|
__dirname,
|
|
"..",
|
|
"node_modules/d3-scale/dist/d3-scale.min.js"
|
|
),
|
|
printj: path.join(
|
|
__dirname,
|
|
"..",
|
|
"node_modules/printj/dist/printj.min.js"
|
|
),
|
|
styles: path.join(__dirname, "..", "src/styles"),
|
|
MCT: path.join(__dirname, "..", "src/MCT"),
|
|
testUtils: path.join(__dirname, "..", "src/utils/testUtils.js"),
|
|
objectUtils: path.join(
|
|
__dirname,
|
|
"..",
|
|
"src/api/objects/object-utils.js"
|
|
),
|
|
utils: path.join(__dirname, "..", "src/utils")
|
|
}
|
|
},
|
|
plugins: [
|
|
new webpack.DefinePlugin({
|
|
__OPENMCT_VERSION__: `'${packageDefinition.version}'`,
|
|
__OPENMCT_BUILD_DATE__: `'${new Date()}'`,
|
|
__OPENMCT_REVISION__: `'${gitRevision}'`,
|
|
__OPENMCT_BUILD_BRANCH__: `'${gitBranch}'`
|
|
}),
|
|
new VueLoaderPlugin(),
|
|
new CopyWebpackPlugin({
|
|
patterns: [
|
|
{
|
|
from: "src/images/favicons",
|
|
to: "favicons"
|
|
},
|
|
{
|
|
from: "./index.html",
|
|
transform: function (content) {
|
|
return content.toString().replace(/dist\//g, "");
|
|
}
|
|
},
|
|
{
|
|
from: "src/plugins/imagery/layers",
|
|
to: "imagery"
|
|
}
|
|
]
|
|
}),
|
|
new MiniCssExtractPlugin({
|
|
filename: "[name].css",
|
|
chunkFilename: "[name].css"
|
|
})
|
|
],
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.(sc|sa|c)ss$/,
|
|
use: [
|
|
MiniCssExtractPlugin.loader,
|
|
{
|
|
loader: "css-loader"
|
|
},
|
|
{
|
|
loader: "resolve-url-loader"
|
|
},
|
|
{
|
|
loader: "sass-loader",
|
|
options: { sourceMap: true }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
test: /\.vue$/,
|
|
use: "vue-loader"
|
|
},
|
|
{
|
|
test: /\.html$/,
|
|
type: "asset/source"
|
|
},
|
|
{
|
|
test: /\.(jpg|jpeg|png|svg)$/,
|
|
type: "asset/resource",
|
|
generator: {
|
|
filename: "images/[name][ext]"
|
|
}
|
|
},
|
|
{
|
|
test: /\.ico$/,
|
|
type: "asset/resource",
|
|
generator: {
|
|
filename: "icons/[name][ext]"
|
|
}
|
|
},
|
|
{
|
|
test: /\.(woff|woff2?|eot|ttf)$/,
|
|
type: "asset/resource",
|
|
generator: {
|
|
filename: "fonts/[name][ext]"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
stats: "errors-warnings",
|
|
performance: {
|
|
// We should eventually consider chunking to decrease
|
|
// these values
|
|
maxEntrypointSize: 25000000,
|
|
maxAssetSize: 25000000
|
|
}
|
|
};
|
|
|
|
module.exports = config;
|