Skip to content

Instantly share code, notes, and snippets.

@josfaber
Last active November 22, 2021 15:15
Show Gist options
  • Save josfaber/a2def0620f4731753dfad7ec9d120ed9 to your computer and use it in GitHub Desktop.
Save josfaber/a2def0620f4731753dfad7ec9d120ed9 to your computer and use it in GitHub Desktop.
Simple project setup es6/scss
// package.json
{
"name": "waarom",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"dependencies": {},
"devDependencies": {
"@babel/core": "^7.16.0",
"@babel/preset-env": "^7.16.4",
"babel-loader": "^8.2.3",
"browser-sync": "^2.27.7",
"browser-sync-webpack-plugin": "^2.3.0",
"css-loader": "^6.5.1",
"html-loader": "^3.0.1",
"html-webpack-plugin": "^5.5.0",
"mini-css-extract-plugin": "^2.4.5",
"node-sass": "^6.0.1",
"postcss-loader": "^6.2.0",
"sass-loader": "^12.3.0",
"style-loader": "^3.3.1",
"terser-webpack-plugin": "^5.2.5",
"vue": "^2.6.14",
"vue-loader": "^15.9.8",
"webpack": "^5.64.2",
"webpack-assets-manifest": "^5.0.6",
"webpack-cli": "^4.9.1"
},
"scripts": {
"watch": "webpack --watch --mode development --env development",
"build": "webpack --progress --mode production --env production "
},
"author": "",
"license": "ISC"
}
// webpack.config.js
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const { VueLoaderPlugin } = require("vue-loader");
// const WebpackAssetsManifest = require('webpack-assets-manifest');
const BrowserSyncPlugin = require( 'browser-sync-webpack-plugin' );
module.exports = {
mode: 'development',
devtool: 'eval-cheap-module-source-map',
entry: {
'main': './src/js/main.js'
},
output: {
filename: 'js/[name].bundle.js',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
options: {
presets: ['@babel/preset-env'],
}
}
},
{
test: /\.(sa|sc|c)ss$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
options: {
publicPath: '../'
}
},
'css-loader',
'sass-loader',
]
},
{
test: /\.vue$/,
loader: "vue-loader",
},
{
test: /\.(png|jpg|jpeg|gif)$/,
type: 'asset',
generator: {
filename: 'img/[name][ext]',
},
},
{
test: /\.svg$/,
type: 'asset/inline',
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
type: 'asset/resource',
generator: {
filename: 'font/[name][ext]',
},
},
]
},
plugins: [
new VueLoaderPlugin(),
new MiniCssExtractPlugin({
filename: "css/[name].bundle.css",
chunkFilename: "css/[name][id].bundle.css"
}),
new HtmlWebpackPlugin({
template: 'src/index.html'
}),
new BrowserSyncPlugin( {
files: [
path.resolve( __dirname, 'src/**/*.scss' ),
path.resolve( __dirname, 'src/**/*.js' ),
],
proxy: 'https://proto.mmsrv.nl/waarom/dist/',
open: false,
}, {
reload: false,
name: 'bs-webpack-plugin',
} ),
],
resolve: {
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment