[[oktatas:web:nodejs|< Node.js]]
====== SWC ======
* **Szerző:** Sallai András
* Copyright (c) 2024, Sallai András
* Szerkesztve: 2024
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
Az SWC a Speedy Web Compiler rövidítése. Az SWC fordító és csomagoló egyben, és Rust nyelven írták. Leginkább Node.js-re optimalizálva.
Webhely:
* https://swc.rs/
Egyéb csomagolók (bundler):
* webpack
* rollup
* esbuild
* parcel
===== Használat =====
Készítsünk egy Node.js projektet.
npm init -y
Benne egy src könyvtár, abban egy logger.js és egy index.js fájl:
app01/
|-src/
| |-index.js
| `-logger.js
`-package.json
class Logger {
static log(msg) {
console.log(msg);
}
}
export default Logger;
class App {
static main() {
Logger.log("Hello World!");
}
}
App.main();
Telepítsük a függőségeket:
pnpm i --save-dev @swc/cli @swc/core
Fordítsuk le az src könyvtár tartalmát:
npx swc src/index.js
A konzolra írja az eredményt.
A -o kapcsolóval megmondhatjuk, milyen fájlba írjon. Legyen például egy output.js:
npx swc src/index.js -o output.js
Ezt követően a projekt gyökérkönyvtárba teszi az output.js fájlt, benne a lefordított JavaScript tartalom.
Általában ezeket a fájlokat a dist könyvtárban szeretjük viszontlátni. Használjuk a -d kapcsolót:
npx swc src/index.js -d dist
Így azonban az src könyvtár is bekerül a dist könyvtárba. Használjuk a --strip-leading-paths kapcsolót:
npx swc src/index.js -d dist --strip-leading-paths
===== Alternatívák =====
Lehet így is:
npx swc src -d dist --strip-leading-paths
Vagy így:
npx swc src/*.js -d dist --strip-leading-paths
===== Beállítófájl =====
A projekt gyökérkönyvtárában hozzunk létre egy .swcrc nevű fájlt a következő tartalommal:
{
"minify": true
}
Fordítsuk újra és nézzük meg az eredményt:
npx swc src/index.js -d dist --strip-leading-paths
===== Csomagoló konfiguráció =====
module.exports = {
entry: {
web: __dirname + "/src/index.js",
},
output: {
path: __dirname + "/dist",
},
options: {
minify: true
}
};
Fordítás:
npx spack
Ha így használjuk a dist könyvtárban létrejön egy web.js és egy web.js.map fájl.
Beállíthatjuk a "web" helyett milyen néven jelenjen meg. Például bunle.js:
module.exports = {
entry: {
web: __dirname + "/src/index.js",
},
output: {
path: __dirname + "/dist",
name: "bundle.js"
},
options: {
minify: true
}
};
Ekkor egy bundle.js és egy bundle.js.map fájl jön létre.
===== TypeScript használata =====
Az src könyvtárban használjunk .ts kiterjesztésű fájlt.
Az .swcrc beállítófájl legyen:
{
"minify": true,
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": false
}
}
}