W praktyce nie ma sposobu, by napisać normalną, interaktywną stronę w jednym języku. I dobrze, bo jakby tak się zastanowić, to pomysł napisania witryny w jednym języku nie jest wcale taki mądry.
HTML czy CSS to języki dziedzinowe. Nadają się do opisu -- odpowiednio -- struktury i wyglądu witryny lepiej niż np. JavaScript czy PHP.
Z drugiej strony HTML to język znaczników, a CSS to język arkuszy stylów. To nie są "języki programowania". Do opisu zachowania strony nadają się raczej słabo (poza pewnymi wyjątkami) lub wręcz w ogóle. Z kolei JS i PHP sprawdzają się w tym nieźle.
Jak widzisz, opłaca się korzystać z wielu języków, bo każdy jest lepszy w czymś innym, a potrzebujesz wszystkich tych rzeczy by stworzyć normalną, interaktywną witrynę.
Przecież nie pytasz się, czy da się naprawić dowolną rzecz w samochodzie za pomocą jednego narzędzia, np. śrubokrętu, prawda? Bo to by było głupie. Oczywiste jest, że jedną rzecz lepiej zrobi śrubokręt, a inną młotek -- mimo że śrubokrętem też niby można walić w gwóźdź czy blachę. Ale już lakieru gwoździem w zasadzie nie sposób nanieść, co nie?
Co do samego JS-a, to nie, nie da się napisać w JS-ie kodu po stronie klienta w "bezpieczny" sposób, tak żeby nikt nie mógł podejrzeć i zrozumieć jego działania. Obfuskacja utrudnia zrozumienie czy "złamanie" kodu, ale to tylko pewne utrudnienie, którego skuteczność nie zbliża się nawet do 100%. Kod, który trafia do przeglądarki, może równie dobrze zostać odczytany przez człowieka. Zdeterminowany hacker/cracker jest w stanie ogarnąć nawet stosunkowo skomplikowany kod, potraktowany obfuscatorem. Ja kiedyś musiałem ogarnąć kod czegoś w rodzaju JS-owego "wirusa", który atakował strony. Kod był potraktowany obfuscatorem, podwójnie zabezpieczony jakimś niby szyfrowaniem, całość wykonywana była przez eval()
. Nie miałem problemów ze złamaniem tych pożal się Boże utrudnień, a byłem wtedy studencikiem i to bynajmniej nie ostatniego roku. Żadnym też geniuszem.
Ale to, że kodu nie da się w sensie stricte zabezpieczyć, już wiedziałeś.
Owszem, da się go zabezpieczyć prawnie, wydając na odpowiedniej licencji. Podobne licencje czy podobne prawo chroni np. utwory muzyczne czy filmy ;).
BTW: w node.js nie napisze się całej, normalnej stronki. Tak naprawdę, użyje się -- pośrednio -- HTML-a. Choćby w postaci wywołań DOM. Konkretnie, będą to wywołania interfejsu, który nie na darmo nazywa się HTML DOM. Nawet jakbyśmy użyli canvas
by narysować całą stronę, co w 99.9999% przypadków byłoby idiotyczne, to canvas
też jest częścią HTML-a.