UNPKG

room-gallery

Version:

Room Gallery: A 3D carousel - A Responsive 3D Image Slider Implemented in TypeScript as a React Component, Utilizing Vanilla JavaScript and jQuery

298 lines (290 loc) 6.59 kB
const webpack = require("webpack"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const path = require("path"); const demoOutput = (env, argv) => { return { entry: { demo: { filename: "demo.js", import: "./src/demo.tsx" }, }, output: { path: path.join(__dirname, "docs") }, module: { rules: [ { test: /\.(png|jp(e*)g|gif)$/, type: "asset/resource", generator: { filename: "img/[name][ext][query]", } }, { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: ["ts-loader"], }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: ["babel-loader", "astroturf/loader"], }, { test: /\.s(a|c)ss$/, use: [ MiniCssExtractPlugin.loader, { loader: "css-loader", options: { modules: { localIdentName: "[local]", }, sourceMap: false, }, }, { loader: "postcss-loader", options: { postcssOptions: { plugins: [ [ "postcss-preset-env" ], ], }, }, }, { loader: "sass-loader", options: { sourceMap: false, }, }, ], }, ], }, resolve: { extensions: [".tsx", ".ts", ".js", ".jsx", ".scss"], }, externals: { "jQuery": "jQuery" }, target: "web", node: { __dirname: false, }, stats: { warnings: false, }, devServer: { static: path.join(__dirname, "public"), compress: true, port: 3011, }, plugins: [ new webpack.HotModuleReplacementPlugin(), new HtmlWebpackPlugin({ template: "./src/index.html", }), new MiniCssExtractPlugin({ filename: "RoomGallery.css" }) ] } }; const pluginsOutput = (env, argv) => { return { entry: { jquery: { import: "./src/jquery.tsx", filename: "jQueryRoomGallery.js", library: { type: "umd", name: "RoomGallery", export: "default" } }, RoomGallery: { import: "./src/RoomGallery.tsx", filename: "RoomGallery.js", library: { type: "umd", name: "RoomGallery", export: "default" } } }, output: { path: path.join(__dirname, "build") }, module: { rules: [ { test: /\.(png|jp(e*)g|gif)$/, type: "asset/resource", generator: { filename: "img/[name][ext][query]", } }, { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: ["ts-loader"], }, { test: /\.(js|jsx)$/, exclude: /node_modules/, use: ["babel-loader", "astroturf/loader"], }, { test: /\.s(a|c)ss$/, use: [ MiniCssExtractPlugin.loader, { loader: "css-loader", options: { modules: { localIdentName: "[local]", }, sourceMap: false, }, }, { loader: "postcss-loader", options: { postcssOptions: { plugins: [ [ "postcss-preset-env" ], ], }, }, }, { loader: "sass-loader", options: { sourceMap: false, }, }, ], }, ], }, resolve: { extensions: [".tsx", ".ts", ".js", ".jsx", ".scss"], }, externals: { "jQuery": "jQuery" }, plugins: [ new webpack.HotModuleReplacementPlugin(), new MiniCssExtractPlugin({ filename: "RoomGallery.css" }) ] } }; const cssOutput = (env, argv) => { return { entry: ["./scss/room-gallery.scss"], output: { path: path.join(__dirname, "build"), }, module: { rules: [ { test: /\.(png|jp(e*)g|gif)$/, type: "asset/resource", generator: { filename: "img/[name][ext][query]", } }, { test: /\.s(a|c)ss$/, use: [ MiniCssExtractPlugin.loader, { loader: "css-loader", options: { modules: { localIdentName: "[local]", }, sourceMap: false, }, }, { loader: "postcss-loader", options: { postcssOptions: { plugins: [ [ "postcss-preset-env" ], ], }, }, }, { loader: "sass-loader", options: { sourceMap: false, }, }, ], }, ], }, plugins: [ new MiniCssExtractPlugin({ filename: "RoomGallery.css" }) ] } }; const jsOutput = (env, argv) => { return { entry: ["./src/index.tsx"], output: { path: path.join(__dirname, "build"), filename: "index.js", library: "RoomGallery", globalObject: "this", libraryTarget: "umd" }, module: { rules: [ { test: /\.(ts|tsx)$/, exclude: /node_modules/, use: ["ts-loader"], } ], }, resolve: { alias: { src: path.resolve(__dirname, "src/"), }, extensions: [".tsx", ".ts"], }, externals: { react: { commonjs: "react", commonjs2: "react", amd: "react", root: "React", }, "react-dom": { commonjs: "react-dom", commonjs2: "react-dom", amd: "react-dom", root: "ReactDOM", }, }, } }; module.exports = [demoOutput, pluginsOutput, jsOutput, cssOutput];