I’ve been trying to learn AWS’s CDK and one of my attempts involved using a seperate repositories for both the infrastructure and the application itself.
My application repository is the bog standard vite@latest install. No changes.
I’m having issues where when i deploy, the build is crashing with codeBuilds log stating src/App.tsx(2,23): error TS2307: Cannot find module './assets/react.svg' or its corresponding type declarations.
I’ve tried adjusting the tsconfig to include an @types folder with declarations for svg but this didn’t work at all. It just gave more typescript errors.
I feel like i’m missing something really silly.
My CDK Pipeline:
const pipeline = new CodePipeline(this, "CahmFrontendPipeline", {
pipelineName: "CahmFrontendPipeline",
synth: new ShellStep("Synth", {
input: CodePipelineSource.gitHub("myuser/myrepo", "master", {
authentication: cdk.SecretValue.secretsManager("MY_SECRET"),
}),
primaryOutputDirectory: "dist",
commands: [
"cd frontend",
"npm i",
"npm run build",
"npx cdk synth",
],
}),
});
This all works right till the codebuild. I’ve tried changing the image it’s using as well but to no avail. Has anyone had this problem and might be able to point me in the right direction?
2
Answers
So to those who find this question i've put here, the problem was from 2 different sources for me.
First, The version of the image used for the codebuild was defaulting to version 1 every time I redeployed as i hadn't chosen a specific image to use.
Secondly, this pipeline function isn't made for what i wanted it to do. For context, if you are wanting to build a
source => build => deploy
framework, make sure to useaws_codePipeline.Pipeline
to build out each step.You can find good examples of this in their documentation.
Things get confusing because paths act differently between dev and build (prod). I created a very simple example sandbox to help visual things using the Vite starter app. I would also recommend reading the Static Asset Handling. Also incredibly useful are the Vite Build Options which let you change where files are output.
Ideally, you want to use
import reactSVG from './assets/react.svg'
at the top of your component, then reference that src in the render usingsrc={reactSVG)
. Both dev and build will be happy with that.Or you should use an absolute path like
/assets/react.svg
, removing the.
in front.Besides the sandbox above, I wrote detailed notes on what’s happening inline above each image to help the understanding.