Webpack Encore od Symfony je fantastická věc, umožňuje snadno používat v projektech SCSS stylování, Vue.js, TypeScript a jiné nejmodernější vymoženosti, které nabízí Webpack. Konfigurace Encore je snadná oproti čistému Webpacku, je to v podstatě „human-readable“ generátor konfiguračního souboru pro Webpack a zároveň automatizace vkládání entrypointů do šablon. Entrypointy jsou generovány do json souboru, ze kterého si Encore tahá aktuální verzi a není třeba se o nic starat.
Integrace Webpack Encore do Python (používám také v PHP projektech bez Symfony framework).
pip install django-encore
+ přidat django-encore do requirements.txt
Jsem zvyklý z PHP vytvářit složku /assets v root projektu a v ní podsložky /styles a /scripts. V Pythonu žádný problém, lze použít totéž.
Další informace k instalace Webpack Encore https://github.com/egorsmkv/django-encore.
Uprava setttings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "static",
BASE_DIR / "assets_build",
]
ENCORE_ENTRYPOINTS_FILE = BASE_DIR / 'assets_build/build/entrypoints.json'
NPM balíčky Webpack Encore + SASS + FA5 ikonky
Přidat soubor package.json a spustit: npm install (+ přidat node_modules do .gitignore).
{
"devDependencies": {
"@fortawesome/fontawesome-free": "5.10.2",
"@symfony/webpack-encore": "0.28.0",
"node-sass": "4.13.1",
"sass-loader": "7.3.1",
"webpack-notifier": "1.8.0"
},
"license": "UNLICENSED",
"private": true,
"scripts": {
"dev-server": "encore dev-server",
"dev": "encore dev",
"watch": "encore dev --watch",
"build": "encore production --progress"
}
}
webpack.config.js
var Encore = require('@symfony/webpack-encore');
Encore
// directory where compiled assets will be stored
.setOutputPath('assets_build/build/')
// public path used by the web server to access the output path
.setPublicPath('/static/build')
// only needed for CDN's or sub-directory deploy
.setManifestKeyPrefix('static/build/')
/*
* ENTRY CONFIG
*
* Add 1 entry for each "page" of your app
* (including one that's included on every page - e.g. "app")
*
* Each entry will result in one JavaScript file (e.g. app.js)
* and one CSS file (e.g. app.css) if you JavaScript imports CSS.
*/
// .addEntry('app', './assets/js/app.js')
.addEntry('demo1', './assets/scripts/demo1.js')
.splitEntryChunks()
// will require an extra script tag for runtime.js
// but, you probably want this, unless you're building a single-page app
.enableSingleRuntimeChunk()
/*
* FEATURE CONFIG
*
* Enable & configure other features below. For a full
* list of features, see:
* https://symfony.com/doc/current/frontend.html#adding-more-features
*/
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
// enables hashed filenames (e.g. app.abc123.css)
.enableVersioning(Encore.isProduction())
// enables Sass/SCSS support
.enableSassLoader()
// uncomment if you use TypeScript
//.enableTypeScriptLoader()
// uncomment if you're having problems with a jQuery plugin
// .autoProvidejQuery()
// uncomment if you use API Platform Admin (composer req api-admin)
//.enableReactPreset()
;
module.exports = Encore.getWebpackConfig();
Hotovo. Teď už jen přidat např. soubor demo1.js do /assets/scripts/ a můžeme buildit.
npm run dev
Další entrypointy přidat řádek addEntry třeba pro každou stránku jeden skriptík.