Case insensitive: un esempio concreto
Ho creato una applicazione Node.Js di esempio che sfrutta Webpack per gestire gli import. Nel paragrafo Riferimenti trovate il link al progetto con il codice eseguibile mentre di seguito riportiamo solo le parti principali.
I due file sorgenti dell’esempio sono i seguenti:
index.js
import {foobar} from './FooBar' console.log("foobar is ", foobar)
Foobar.js
export const foobar = 42;
Da notare che l’import dentro index si riferisce a un file FooBar
, mentre il file si chiama Foobar
.
La differenza è sottile ed è quello che rende il problema spinoso e difficile da individuare.
Build su Mac Os X
La build può essere eseguita con il comando npx webpack
. L’output del comando ne dimostra la corretta esecuzione
Hash: 449c8fcaf39b09803703 Version: webpack 4.42.0 Time: 91ms Built at: 03/05/2020 7:32:46 PM Asset Size Chunks Chunk Names main.js 980 bytes 0 [emitted] main Entrypoint main = main.js [0] ./src/index.js + 1 modules 93 bytes {0} [built] | ./src/index.js 67 bytes [built] | ./src/FooBar.js 26 bytes [built]
Build tramite docker
Ho approntato anche un dockerfile che esegue una build in un container linux, case sensitive, usando lo stesso comando npx webpack
.
Lanciando il comando docker image build -t itFails .
vediamo che fallisce per non aver trovato il file giusto.
ERROR in ./src/index.js Module not found: Error: Can't resolve './FooBar' in '/usr/src/app/src' @ ./src/index.js 1:0-31 3:26-32