136 lines
4.3 KiB
JavaScript
136 lines
4.3 KiB
JavaScript
// AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
|
|
const path = require ('path')
|
|
const WebpackSweetEntry = require('webpack-sweet-entry');
|
|
const CleanWebpackPlugin = require('clean-webpack-plugin');
|
|
const StringReplacePlugin = require("string-replace-webpack-plugin");
|
|
const ExtractTextPlugin = require("extract-text-webpack-plugin");
|
|
const ProvidePlugin = require('webpack').ProvidePlugin
|
|
|
|
const config_button=require('./config/settings.json');
|
|
|
|
const sourcePath = path.join(__dirname, 'client');
|
|
const buildPath = path.join(__dirname, 'public/client');
|
|
const translationPath = path.join(__dirname, 'public/javascripts/_final.js')
|
|
const reactEntrySourcePath = path.join(__dirname, 'javascripts')
|
|
const reactEntryOutputPath = path.join(__dirname, 'public')
|
|
|
|
var common_rules= [
|
|
|
|
// configure replacements for file patterns
|
|
{
|
|
test: /donate-button.v2.js$/,
|
|
loader: [
|
|
{loader: 'string-replace-loader',
|
|
options: {
|
|
search: 'REPLACE_FULL_HOST',
|
|
replace: config_button.button.url,
|
|
},
|
|
},
|
|
{
|
|
loader: 'string-replace-loader',
|
|
options: {
|
|
search: 'REPLACE_CSS_URL',
|
|
replace: config_button.button.css,
|
|
},
|
|
},
|
|
"babel-loader"]
|
|
},
|
|
{ test: /\.tsx?$/, loader:"ts-loader"},
|
|
{ test: /\.js$/, exclude: /node_modules|froala/, loader: "babel-loader" },
|
|
{ test: /\.es6$/, exclude: /node_modules/, loader: "babel-loader" }
|
|
]
|
|
module.exports = {
|
|
base: {
|
|
module:{
|
|
rules: common_rules
|
|
},
|
|
entry: WebpackSweetEntry(path.resolve(sourcePath, 'js/**/page.js'), 'js', 'js'),
|
|
output: {
|
|
path: path.resolve(buildPath, 'js'),
|
|
filename: '[name].js'
|
|
},
|
|
plugins: [
|
|
new CleanWebpackPlugin([path.resolve(buildPath, 'js')])
|
|
]
|
|
}
|
|
,
|
|
// translations: {
|
|
// module:{
|
|
// rules: common_rules
|
|
// },
|
|
// entry: path.resolve(sourcePath, 'js/translations/translations.js'),
|
|
// output: {
|
|
// path: path.resolve(buildPath, 'js/nonprofits/donate/'),
|
|
// filename: 'i18n.js'
|
|
// },
|
|
|
|
// },
|
|
button: {
|
|
module:{
|
|
rules: common_rules
|
|
},
|
|
entry: path.resolve(sourcePath, 'js/widget/donate-button.v2.js'),
|
|
output: {
|
|
path: path.resolve(path.join(__dirname, 'public', 'js')),
|
|
filename: 'donate-button.v2.js'
|
|
},
|
|
|
|
plugins: [
|
|
// an instance of the plugin must be present
|
|
new StringReplacePlugin()
|
|
]
|
|
},
|
|
translations: {
|
|
module:{
|
|
rules: common_rules
|
|
},
|
|
entry: translationPath,
|
|
output: {
|
|
path: path.join(buildPath, 'js'),
|
|
filename: 'i18n.js'
|
|
}
|
|
},
|
|
css: {
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.css$/,
|
|
use: ExtractTextPlugin.extract({
|
|
use: [
|
|
{
|
|
loader: 'css-loader',
|
|
options: {import: true, importLoaders: 1}
|
|
}
|
|
, 'postcss-loader']
|
|
}
|
|
)
|
|
},
|
|
]
|
|
},
|
|
entry: path.resolve(sourcePath, 'css/global/page.css'),
|
|
output: {
|
|
path: path.resolve(buildPath, 'css/global'),
|
|
filename: 'page.css'
|
|
},
|
|
plugins: [
|
|
new ExtractTextPlugin('page.css'),
|
|
new CleanWebpackPlugin([path.resolve(buildPath, 'css')])
|
|
]
|
|
},
|
|
react: {
|
|
module:{
|
|
rules: common_rules
|
|
},
|
|
entry: WebpackSweetEntry(path.resolve(reactEntrySourcePath, "app/*.ts"), 'ts', 'app'),
|
|
output: {
|
|
path: path.resolve(reactEntryOutputPath, 'app'),
|
|
filename: '[name].js'
|
|
},
|
|
resolve: {
|
|
extensions: [".ts", ".tsx", ".js", ".json"],
|
|
},
|
|
plugins: [
|
|
new CleanWebpackPlugin([path.resolve(reactEntryOutputPath, 'app')])
|
|
]
|
|
}
|
|
}
|