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.