Последние пару дней я боролся со следующей проблемой и не могу ее отследить. У меня есть монорепозиторий машинописного текста с общим пакетом, который я пытаюсь разработать в докере с помощью docker-compose. Я могу запустить их все прямо с моей локальной машины с помощью yarn, и все загружается нормально. Однако, как только я их докеризую и запускаю с помощью docker-compose, API не запускается с выводом:
/project/node_modules/@project/shared-components/index.ts:1
export * from './src';
^^^^^^
SyntaxError: Unexpected token 'export'
Что мне очень похоже на то, что Babel почему-то терпит неудачу. Файл docker-compose выполняет идентичную команду, которую я использую из своей локальной сети, и использует все те же файлы конфигурации. Я также устанавливаю объем каждого контейнера докеров в рабочую область пряжи, содержащую мои пакеты.
file structure
/project
/packages
/api
/shared-components
command run from workspace root
yarn install
yarn run dev
/project/package.json
...
"workspaces": {
"packages": [
"packages/*"
]
},
"scripts": {
...
"dev": "docker-compose build --parallel && docker-compose up --remove-orphans -d"
}
/project/docker-compose.yml
version: '3.8'
services:
api:
container_name: api
environment:
- NODE_ENV=development
volumes:
- './:/project'
build:
context: '.'
dockerfile: Dockerfile.dev
working_dir: /project/packages/api
entrypoint: ['yarn', 'run', 'dev']
ports:
- '3000:3000'
/project/Dockerfile.dev
# configure container
FROM node:14
USER root
/project/packages/api/package.json
...
"scripts": {
...
"dev": "set NODE_ENV=development&& set NEW_RELIC_ENABLED=false&& nodemon -e js,ts,json --exec babel-node --config-file ../../babel.config.json --extensions .ts,.js ./src/index.ts",
}
/project/packages/api/src/index.ts
require('@babel/register')({
rootMode: 'upward',
ignore: ['../../node_modules'],
extensions: ['.js', '.ts'],
});
require('./server');
/project/babel.config.json
{
"babelrcRoots": ["./packages/*"],
"presets": [
"@babel/preset-env",
"@babel/preset-typescript",
[
"minify",
{
"builtIns": false,
"evaluate": false,
"mangle": false
}
]
],
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"regenerator": true,
"corejs": 3
}
]
],
"ignore": ["**/*.test.ts", "**/*.test.tsx", "**/*.test.js", "**/*.test.jsx"]
}
/package/tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"noImplicitAny": false,
"allowSyntheticDefaultImports": true,
"noEmit": true,
"isolatedModules": true,
"declaration": true,
"downlevelIteration": true,
"rootDir": ".",
"baseUrl": ".",
"outDir": "./.ts",
"target": "ES5",
"module": "ESNext",
"moduleResolution": "node",
"paths": {
"@allido/*": ["./packages/*"]
}
},
"include": ["./.storybook/main.tsx", "./packages/**/*"],
"exclude": [
"./node_modules",
"./.storybook",
"**/node_modules",
"**/.next",
"**/.lib",
"**/out",
"**/.ts",
"**/*.test.ts",
"**/*.test.js"
]
}
В общих компонентах нет ничего особенно важного. Еще одна странная часть этой истории заключается в том, что в той же рабочей области у меня есть веб-приложение nextjs, которое использует тот же пакет shared-components
. Он также использует тот же файл babel.config.json, тот же файл tsconfig и отлично работает в докере.
Я думаю, что включил все соответствующие файлы, но, пожалуйста, дайте мне знать, если я пропустил что-то, что было бы важно увидеть. Я действительно сбит с толку тем фактом, что это прекрасно работает из моей локальной сети с идентичными параметрами, но не работает в самом простом из файлов докеров с общим томом.
Я был бы очень признателен за любую помощь или направление о том, как решить эту проблему. В сети почти ничего подходящего не нашел.
Спасибо!