feat(main): Add base theme: This is the falcon theme out of the box.
This is falcon v3.1.2
This commit is contained in:
216
falcon/_dev/webpack/webpack.parts.js
Normal file
216
falcon/_dev/webpack/webpack.parts.js
Normal file
@ -0,0 +1,216 @@
|
||||
const chokidar = require('chokidar');
|
||||
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const path = require('path');
|
||||
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const FontPreloadPlugin = require('webpack-font-preload-plugin');
|
||||
|
||||
exports.configureDevServer = (serverAddress, publicPath, port, siteURL) => ({
|
||||
allowedHosts: [ serverAddress ],
|
||||
host: serverAddress,
|
||||
client: {
|
||||
logging: 'error',
|
||||
progress: false,
|
||||
overlay: {
|
||||
errors: true,
|
||||
warnings: false,
|
||||
},
|
||||
},
|
||||
devMiddleware: {
|
||||
publicPath: publicPath,
|
||||
writeToDisk: (filePath) => {
|
||||
return !(/hot-update/.test(filePath));
|
||||
},
|
||||
},
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
|
||||
'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',
|
||||
},
|
||||
hot: true,
|
||||
liveReload: true,
|
||||
watchFiles: [
|
||||
'../../**/*.tpl',
|
||||
'../../modules/**/*.js',
|
||||
'../../modules/**/*.css',
|
||||
],
|
||||
open: true,
|
||||
port,
|
||||
proxy: {
|
||||
'**': {
|
||||
target: siteURL,
|
||||
secure: false,
|
||||
changeOrigin: true,
|
||||
}
|
||||
},
|
||||
static: {
|
||||
publicPath: publicPath,
|
||||
},
|
||||
});
|
||||
|
||||
exports.extractScss = ({mode = 'production'}) => ({
|
||||
module: {
|
||||
rules: [{
|
||||
test: /\.scss$/,
|
||||
use: [
|
||||
MiniCssExtractPlugin.loader,
|
||||
'css-loader',
|
||||
{
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
postcssOptions: {
|
||||
config: path.resolve(__dirname, 'postcss.config.js'),
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
loader: 'sass-loader',
|
||||
options: {
|
||||
implementation: require('sass'),
|
||||
},
|
||||
},
|
||||
]
|
||||
}]
|
||||
},
|
||||
plugins: [
|
||||
new MiniCssExtractPlugin({
|
||||
filename: 'css/[name].css',
|
||||
chunkFilename: mode === 'production' ? 'css/[chunkhash].css' : 'css/[id].css',
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
exports.extractJs = () => ({
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /swiper\.esm\.js/,
|
||||
sideEffects: false
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
exclude: /(node_modules)/,
|
||||
use: {
|
||||
loader: 'esbuild-loader',
|
||||
options: {
|
||||
target: 'es2015'
|
||||
}
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
exports.extractImages = ({ publicPath }) => ({
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.(png|jpg|gif|svg)$/,
|
||||
use: [
|
||||
{
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
outputPath: 'img-dist/',
|
||||
publicPath: publicPath + '/img-dist/',
|
||||
name: '[contenthash].[ext]',
|
||||
},
|
||||
},
|
||||
],
|
||||
type: 'javascript/auto',
|
||||
},
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
exports.extractFonts = ({ publicPath }) => ({
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.(woff|woff2|ttf|eot)$/,
|
||||
use: [
|
||||
{
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
outputPath: 'fonts/',
|
||||
publicPath: publicPath + '/fonts/',
|
||||
name: '[name]-[contenthash].[ext]',
|
||||
},
|
||||
},
|
||||
],
|
||||
type: 'javascript/auto',
|
||||
}
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
exports.extractVendorsChunks = () => ({
|
||||
optimization: {
|
||||
splitChunks: {
|
||||
cacheGroups: {
|
||||
swiper: {
|
||||
test: /[\\/]node_modules[\\/](swiper|dom7)[\\/]/,
|
||||
name: 'swipervendor',
|
||||
filename: 'js/swipervendor.js',
|
||||
chunks: 'initial',
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
exports.cleanDistFolders = () => ({
|
||||
plugins: [
|
||||
new CleanWebpackPlugin({
|
||||
dry: false,
|
||||
dangerouslyAllowCleanPatternsOutsideProject: true,
|
||||
cleanOnceBeforeBuildPatterns: [
|
||||
path.join(__dirname, '../../assets/js/**'),
|
||||
path.join(__dirname, '../../assets/css/**'),
|
||||
path.join(__dirname, '../../assets/img-dist/**'),
|
||||
path.join(__dirname, '../../assets/fonts/**')
|
||||
],
|
||||
}),
|
||||
]
|
||||
})
|
||||
|
||||
exports.externals = () => ({
|
||||
externals: {
|
||||
prestashop: 'prestashop',
|
||||
$: '$',
|
||||
jquery : 'jQuery'
|
||||
}
|
||||
})
|
||||
|
||||
exports.preloadFonts = () => ({
|
||||
plugins: [
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'preload.html',
|
||||
templateContent: '{{{preloadLinks}}}',
|
||||
inject: false,
|
||||
}),
|
||||
new FontPreloadPlugin({
|
||||
index: 'preload.html',
|
||||
extensions: ['woff2'],
|
||||
filter: /(materialicons|roboto-v20-latin-ext_latin-regular|roboto-v20-latin-ext_latin-700|roboto-v20-latin-ext_latin-500|icomoon)/i,
|
||||
replaceCallback: ({ indexSource, linksAsString }) => {
|
||||
return indexSource.replace('{{{preloadLinks}}}', linksAsString);
|
||||
},
|
||||
}),
|
||||
]
|
||||
})
|
||||
|
||||
exports.resolve = () => ({
|
||||
resolve: {
|
||||
modules: [
|
||||
'node_modules',
|
||||
path.resolve('node_modules')
|
||||
],
|
||||
alias: {
|
||||
'@node_modules': path.resolve(__dirname, '../node_modules'),
|
||||
'@themeAbstract': path.resolve(__dirname, '../css/abstracts'),
|
||||
'@css': path.resolve(__dirname, '../css'),
|
||||
'@js': path.resolve(__dirname, '../js'),
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user