typescript-project-generator
Version:
A TypeScript initial configuration for web projects
100 lines (82 loc) • 1.83 kB
JavaScript
const writeFile = require('../utils/writeFile')
/**
* @param {String} projectName
* @param {'yarn add'|'npm i'|'pnpm i'} manager
* @returns {Promise<void>}
*/
module.exports = async (projectName, manager) => {
const managerName = manager.split(' ')[0]
const nodeMajorVersion = process.version.match(/^v(\d+)/)[1]
const data = {
docker: {
content: `FROM node:${nodeMajorVersion}-alpine
${managerName === 'pnpm' ? '\nRUN corepack enable\n' : ''}
WORKDIR /app
COPY package*.json ${managerName === 'yarn' ? 'yarn.lock' : managerName === 'pnpm' ? 'pnpm-lock.yaml' : 'package-lock.json'} ./
RUN ${managerName === 'yarn' ? 'yarn install --frozen-lockfile' : managerName === 'npm' ? 'npm ci' : 'pnpm install --frozen-lockfile'}
COPY . .
RUN ${managerName === 'yarn' ? 'yarn build' : managerName === 'npm' ? 'npm run build' : 'pnpm build'}
EXPOSE 3000
CMD ["node", "dist/index.js"]`,
file: 'Dockerfile'
},
dockerignore: {
content: `
.git
.gitignore
.github
node_modules
dist
coverage
biome.json
.biomeignore
jest.config.ts
tsconfig*.json
.env.example
*.md
LICENSE
CHANGELOG.md
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
pids
*.pid
*.seed
*.pid.lock
.npm
.eslintcache
.vscode
.idea
.DS_Store
Thumbs.db
test/
*.test.ts
*.test.js
*.spec.ts
*.spec.js`,
file: '.dockerignore'
}
}
await Promise.all([
writeFile(`${projectName}/${data.docker.file}`, data.docker.content),
writeFile(
`${projectName}/${data.dockerignore.file}`,
data.dockerignore.content
)
])
}