Skip to content
This repository has been archived by the owner on Aug 7, 2023. It is now read-only.

Commit

Permalink
Tech: passe à Parcel 2.5.0
Browse files Browse the repository at this point in the history
https://github.com/parcel-bundler/parcel/releases/tag/v2.5.0

https://www.npmjs.com/package/parcel/v/2.5.0

== Notes de migration ==

- Par défaut, Parcel v2 utilise swc au lieu de Babel pour la transpilation

  Avantage : c’est plus rapide. Par contre, l’utilisation des tagged template litterals conduit à la génération de code qui déclenche une erreur dans terser (le minifieur) : parcel-bundler/parcel#7101

  On contourne le problème en écrivant différemment notre code pour échapper le nom du profil dans le HTML généré dynamiquement.

- Depuis la 2.4.0, Parcel utilise @parcel/css au lieu de PostCSS (cf. https://parceljs.org/blog/v2-4-0/)

- On met à jour les anciens plugins (changement d’API) :

  - on remplace le plugin [parcel-plugin-static-files-copy](https://www.npmjs.com/package/parcel-plugin-static-files-copy) par [parcel-reporter-static-files-copy](https://www.npmjs.com/package/parcel-reporter-static-files-copy)

  - on remplace [parcel-plugin-ogimage](https://www.npmjs.com/package/parcel-plugin-ogimage) par [parcel-optimizer-ogimage](https://www.npmjs.com/package/parcel-optimizer-ogimage)

  - on remplace [parcel-plugin-html-externals](https://www.npmjs.com/package/parcel-plugin-html-externals) par [parcel-resolver-ignore](https://www.npmjs.com/package/parcel-resolver-ignore)

  - on active le plugin standard `@parcel/resolver-glob` pour utiliser des imports `*` comme dans Parcel V1.

  - on remplace le plugin [parcel-plugin-sw-asset-urls](https://www.npmjs.com/package/parcel-plugin-sw-asset-urls) par le plugin standard `@parcel/service-worker` (ce qui évite de devoir maintenir à la main la liste de fichiers à mettre en cache)

- On s’assure que les noms des bundles soient mcc.XXX.(css|js)

  Les règles de nommage par défaut de Parcel utilisent l’arbre d’import pour déterminer quel est le nom du fichier racine : https://github.com/parcel-bundler/parcel/blob/v2/packages/namers/default/src/DefaultNamer.js

  Cela donne des noms un peu arbitraires pour les bundles CSS et JS.

  On utilise le plugin `parcel-namer-rewrite` pour forcer un nom plus explicite : https://www.npmjs.com/package/parcel-namer-rewrite

- On normalise les liens dans les fichiers sources :

  - lien absolu "/" pour aller vers la page d’accueil
  - lien relatif "toto.html" pour aller vers une autre page

  Note: des liens absolus seront bien générés par Parcel au final.

- On ajoute un lien vers le fichier `browserconfig.xml`

- On note que deux versions du JS sont générées :
  - une pour les navigateurs modernes capables de charger un script de type "module"
  - une option de repli pour les navigateurs plus anciens

  cf. https://parceljs.org/features/targets/#differential-bundling
  • Loading branch information
ronnix committed Apr 28, 2022
1 parent bad3e77 commit 8a27f23
Show file tree
Hide file tree
Showing 26 changed files with 8,191 additions and 8,596 deletions.
4 changes: 2 additions & 2 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
{
"presets": [
[
"@babel/preset-env",
"@parcel/babel-preset-env",
{
"corejs": 3,
"useBuiltIns": "usage"
}
]
]
}
}
12 changes: 0 additions & 12 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,6 @@ jobs:
run: |
make test-feedback
- name: Check versions
run: |
make check-versions
env:
PYTHONUNBUFFERED: "1"

- name: Check orphelins
run: |
make check-orphelins
Expand All @@ -84,12 +78,6 @@ jobs:
env:
PYTHONUNBUFFERED: "1"

- name: Check service-worker
run: |
make check-service-worker
env:
PYTHONUNBUFFERED: "1"

- name: Check internal links
run: |
python3 build.py index thematiques
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ cert.pem
node_modules/
.cache
.nyc_output
.parcel-cache
__pycache__
.tox
*.egg-info
Expand Down
26 changes: 26 additions & 0 deletions .parcelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"extends": "@parcel/config-default",
"namers": [
"parcel-namer-rewrite"
],
"resolvers": [
"@parcel/resolver-glob",
"parcel-resolver-ignore",
"..."
],
"transformers": {
"*.{js,ts}": [
"@parcel/transformer-js"
]
},
"optimizers": {
"*.html": [
"parcel-optimizer-ogimage",
"..."
]
},
"reporters": [
"...",
"parcel-reporter-static-files-copy"
]
}
15 changes: 4 additions & 11 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ uninstall-js:
rm -rf ./node_modules

clean:
rm -rf dist/ src/*.html .cache __pycache__
rm -rf dist/ src/*.html .cache .parcel-cache __pycache__

##
## Run JS unit tests matching a given pattern/browser engine.
Expand Down Expand Up @@ -81,26 +81,20 @@ test-tools:
test-feedback:
tox -e py38 -c feedback/tox.ini

check: check-external-links check-versions check-orphelins check-diagrammes check-service-worker
check: check-external-links check-orphelins check-diagrammes

check-external-links: # Check that links to external pages are still valid.
python3 check.py external_links --timeout 40 --delay 0.3

check-internal-links: build # Check that links to internal pages are still valid.
python3 check.py internal_links

check-versions: # Check that current version matches service-worker one.
python3 check.py versions

check-orphelins: # Check that all markdown files are in use in template.
python3 check.py orphelins

check-diagrammes: # Check that all files from diagrammes/matrice exist.
python3 check.py diagrammes

check-service-worker: src/index.html $(firstword $(THEMATIQUES)) # Check that all files in use are listed in service-worker.js.
python3 check.py service_worker

HTML_EN = src/covid-in-france.html
HTML_FR = $(filter-out $(HTML_EN),$(HTML))

Expand Down Expand Up @@ -154,17 +148,16 @@ dev-ssl: key.pem dist/index.html ## Local HTTPS server with auto rebuild (witho
python3 serve.py --watch $(open) --ssl


pre-commit: pretty lint test-unit dist/index.html check-versions check-orphelins check-diagrammes check-service-worker ## Interesting prior to commit/push.
pre-commit: pretty lint test-unit dist/index.html check-orphelins check-diagrammes ## Interesting prior to commit/push.

release:
echo "{\"version\": \"$$(date --iso-8601)\"}" >static/version.json
sed -i "s/'network-or-cache-.*'/'network-or-cache-$$(date --iso-8601)'/" src/service-worker.js
sed -i "2 a ## $$(date --iso-8601)\n\n* ...\n" CHANGELOG.md

prod: clean install lint pretty test check ## Make sure everything is clean prior to deploy.
# Note: `test` dependency will actually generate the `build`.

.PHONY: serve serve-ssl install install-python install-js clean test test-unit test-integration test-feedback check-external-links check-internal-links check-versions check-documentation check-service-worker check-spelling optimize-images build generate dev pre-commit release prod help
.PHONY: serve serve-ssl install install-python install-js clean test test-unit test-integration test-feedback check-external-links check-internal-links check-documentation check-spelling optimize-images build generate dev pre-commit release prod help

help: ## Display this help.
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
133 changes: 0 additions & 133 deletions check.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,139 +123,6 @@ def internal_links():
raise Exception(f"What is that link?! {internal_link}")


@cli
def versions():
content = open(HERE / "static" / "version.json").read()
data = json.loads(content)
version = data["version"]
line_prefix = "const CACHE_NAME = "
for line in open(SRC_DIR / "service-worker.js"):
if line.startswith(line_prefix):
break
if version not in line:
raise Exception(
f"Version mismatch between version.json ({version}) and service-worker.js"
)


@cli
def service_worker():
# Retrieving the list from CACHE_FILES.
sw_filenames = set()
start = False
for line in open(SRC_DIR / "service-worker.js"):
# Parsing a JS file in Python, what could potentially go wrong?
if line.startswith("const CACHE_FILES = ["):
start = True
continue

if start:
sw_filenames.add(line.strip()[1:-2])

if line.startswith("]"):
break

# Make sure the cached files exist.
for filename in sw_filenames:
if not (
(Path("src") / filename).exists() or (Path("static") / filename).exists()
):
raise Exception(f"Non-existent file in service-worker.js: {filename}")

REQUIRED_FILES = {"/", "style.css", "scripts/main.js", "favicon.ico"}

KNOWN_EXCLUDED_FILES = {
"browserconfig.xml",
"illustrations/activitepro.png",
"illustrations/contact_medecin.png",
"illustrations/contactarisque.png",
"illustrations/covid.png",
"illustrations/depistage.png",
"illustrations/deplacements.png",
"illustrations/foyer.png",
"illustrations/gestesbarrieres.png",
"illustrations/grossesse.png",
"illustrations/isolement.png",
"illustrations/isolement-foyer-malade.png",
"illustrations/jeunes.png",
"illustrations/pass_sanitaire.png",
"illustrations/pediatriemedical.png",
"illustrations/mesconseilscovid.png",
"illustrations/nom.png",
"illustrations/pediatriegeneral.png",
"illustrations/pediatrieecole.png",
"illustrations/sante.png",
"illustrations/situation.png",
"illustrations/solidarites-sante-gouv-fr-infog-vaccins-particuliers.png",
"illustrations/symptomesactuels.png",
"illustrations/symptomespasses.png",
"illustrations/travail.png",
"illustrations/vaccins.png",
"index.html",
"logo.png",
"logo-favicon.png",
"service-worker.js",
"version.json",
"sitemap.xml",
}

sw_filenames |= KNOWN_EXCLUDED_FILES

# Make sure the required files are present.
if not REQUIRED_FILES.issubset(sw_filenames):
raise Exception(
f"File(s) missing in service-worker.js: {REQUIRED_FILES - sw_filenames}"
)

# Compare the list to static files.
static_file_names = {
path.name for path in each_file_from(HERE / "static", exclude=[".DS_Store"])
}
if not static_file_names.issubset(sw_filenames):
raise Exception(
f"File(s) missing in service-worker.js: {static_file_names - sw_filenames}"
)

# Compare the list to font files.
fonts_file_names = {
f"fonts/{path.name}"
for path in each_file_from(
SRC_DIR / "fonts", pattern="*.woff2", exclude=[".DS_Store"]
)
}
if not fonts_file_names.issubset(sw_filenames):
raise Exception(
f"File(s) missing in service-worker.js: {fonts_file_names - sw_filenames}"
)

# Compare the list to illustration files.
illustrations_file_names = {
f"illustrations/{path.name}"
for path in each_file_from(
SRC_DIR / "illustrations",
exclude=[".DS_Store"],
)
}
if not illustrations_file_names.issubset(sw_filenames):
raise Exception(
f"File(s) missing in service-worker.js: {illustrations_file_names - sw_filenames}"
)

# Compare the list to src files.
src_file_names = {
path.name
for path in each_file_from(
SRC_DIR,
pattern="*.*",
exclude=[".DS_Store"],
)
}
if not src_file_names.issubset(sw_filenames):
raise Exception(
f"File(s) missing in service-worker.js: {src_file_names - sw_filenames}"
)


@cli
def orphelins():
template = (TEMPLATES_DIR / "index.html").read_text()
Expand Down
2 changes: 1 addition & 1 deletion construction/directives/renvoi.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def render_html(text, nom_page, titre_page, id_question, titre_question, level):
{render_html_summary('', typographie(titre_question, html=True), level)}
<p>
Voir la réponse sur notre page
« <a href="/{nom_page}#{id_question}">{typographie(titre_page, html=True)}</a> ».
« <a href="{nom_page}#{id_question}">{typographie(titre_page, html=True)}</a> ».
</p>
</details>
"""
2 changes: 1 addition & 1 deletion construction/questions.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def _extract_questions(tree):
details = details.replace("<h2", "<h3").replace("</h2>", "</h3>")
details = details.replace("<h4", "<h3").replace("</h4>", "</h3>")
# On remplace les liens relatifs à la volée.
details = details.replace('href="#', f'href="/{page.name}.html#')
details = details.replace('href="#', f'href="{page.name}.html#')

questions[slug] = {
"titre": node["titre"],
Expand Down
2 changes: 1 addition & 1 deletion construction/tests/test_markdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ def test_renvoi(self):
<p>
Voir la réponse sur notre page
« <a href="/je-veux-me-faire-vacciner.html#suis-je-concerne-par-la-dose-de-rappel-dite-3-e-dose">Je souhaite me faire vacciner</a> ».
« <a href="je-veux-me-faire-vacciner.html#suis-je-concerne-par-la-dose-de-rappel-dite-3-e-dose">Je souhaite me faire vacciner</a> ».
</p>
</details>
"""
Expand Down
2 changes: 1 addition & 1 deletion contenus/conseils/conseils_activité_pro_santé.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* la protection des [professionnels **de santé**](https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/professionnels-de-sante/distrilog-sante),
* la protection des [professionnels **du médico-social**](https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/professionnels-du-social-et-medico-social/),
* les [aides logistiques et psychologiques](https://solidarites-sante.gouv.fr/soins-et-maladies/maladies/maladies-infectieuses/coronavirus/professionnels-de-sante/article/aides-logistiques-et-psychologiques-aux-professionnels) pour tous les professionnels de santé.
* Nos [conseils pour les enfants et adolescents](/conseils-pour-les-enfants.html), si vous travaillez auprès de mineurs et/ou devez conseiller des parents.
* Nos [conseils pour les enfants et adolescents](conseils-pour-les-enfants.html), si vous travaillez auprès de mineurs et/ou devez conseiller des parents.
* [L’espace dédié pour les professionnels](https://www.gouvernement.fr/info-coronavirus/espace-pour-les-professionnels) sur le site du gouvernement.

Vous êtes disponible et vous souhaitez vous porter volontaire ? Inscrivez-vous sur la [plateforme Renfort-RH](https://renfortrh.solidarites-sante.gouv.fr/).
2 changes: 1 addition & 1 deletion contenus/conseils/conseils_enfants.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div class="conseil">

Vous pouvez consultez notre page dédiée sur les [« conseils liés aux activités et à la santé des enfants »](/conseils-pour-les-enfants.html).
Vous pouvez consultez notre page dédiée sur les [« conseils liés aux activités et à la santé des enfants »](conseils-pour-les-enfants.html).

</div>

Expand Down
10 changes: 5 additions & 5 deletions contenus/thematiques/13-conseils-pour-les-jeunes.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@

<div class="voir-aussi">

- Notre page « [Je suis cas contact Covid, que faire ?](/cas-contact-a-risque.html) »
- Notre page « [Je suis cas contact Covid, que faire ?](cas-contact-a-risque.html) »

- Le [protocole sanitaire](https://www.education.gouv.fr/annee-scolaire-2021-2022-protocole-sanitaire-et-mesures-de-fonctionnement-324257) et les [questions-réponses](https://www.education.gouv.fr/covid-19-questions-reponses) sur le site de l’Éducation nationale

Expand Down Expand Up @@ -214,7 +214,7 @@

<div class="voir-aussi">

- Notre page « [Je suis cas contact Covid, que faire ?](/cas-contact-a-risque.html) »
- Notre page « [Je suis cas contact Covid, que faire ?](cas-contact-a-risque.html) »

- Le [protocole sanitaire](https://www.education.gouv.fr/annee-scolaire-2021-2022-protocole-sanitaire-et-mesures-de-fonctionnement-324257) et les [questions-réponses](https://www.education.gouv.fr/covid-19-questions-reponses) sur le site de l’Éducation nationale

Expand Down Expand Up @@ -424,7 +424,7 @@

<div class="voir-aussi">

* Pour plus d’informations, consulte notre page sur [les voyages et le passe sanitaire](/pass-sanitaire-qr-code-voyages.html).
* Pour plus d’informations, consulte notre page sur [les voyages et le passe sanitaire](pass-sanitaire-qr-code-voyages.html).

</div>

Expand Down Expand Up @@ -463,7 +463,7 @@

<div class="voir-aussi">

- En savoir plus sur les [types de tests de dépistage](/tests-de-depistage.html) et trouver celui adapté à ta situation.
- En savoir plus sur les [types de tests de dépistage](tests-de-depistage.html) et trouver celui adapté à ta situation.

</div>

Expand All @@ -486,7 +486,7 @@
- reste **isolé 10 jours** à partir de la date du début de tes symptômes, ou de ton test positif si tu n’as pas de symptômes ;
- en l’absence de fièvre ou de difficultés respiratoires depuis **48 heures**, tu pourras mettre fin à ton isolement après **7 jours** seulement, si tu fais un test antigénique ou PCR et que le résultat est **négatif**.
* **Préviens les personnes** avec qui tu as eu un contact récent (amis, autres élèves…) pour qu’ils se fassent tester, car ils sont **cas contact**.
* Les [personnes avec qui tu habites](/je-vis-avec-personne-covid-positive.html) sont également **cas contact** et doivent s’isoler si elles ne sont pas vaccinées.
* Les [personnes avec qui tu habites](je-vis-avec-personne-covid-positive.html) sont également **cas contact** et doivent s’isoler si elles ne sont pas vaccinées.

L’Assurance Maladie va t’envoyer (ou à tes parents) un **SMS** pour t’expliquer ce que tu dois faire, te fournir un justificatif d’absence, et vous contactera peut-être aussi par **téléphone** pour faire la liste des personnes avec qui tu as été en contact dans les jours précédents.

Expand Down
Loading

0 comments on commit 8a27f23

Please sign in to comment.