MedusaJs с ошибкой выполнения команды по умолчанию Strapi — ApplicationError: требуется тип
Я настраиваю medusaJS с помощью команды Strapi по умолчанию https://docs.medusajs.com/plugins/cms/strapi
Я настроил Redis, medusa cli, использовал Node версии 16,18. Однако у меня возникла эта проблема
Now using node v18.13.0 (npm v8.19.3)
❯ npx create-strapi-app strapi-medusa --template shahednasser/strapi-medusa-template
? Choose your installation type Quickstart (recommended)
Creating a quickstart project.
Creating a new Strapi application at /Users/felixle/Downloads/6github_new/strapi-medusa.
Creating files.
Installing strapi-medusa-template template.
Dependencies installed successfully.
Initialized a git repository.
Your application was created at /Users/felixle/Downloads/6github_new/strapi-medusa.
Available commands in your project:
yarn develop
Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)
yarn start
Start Strapi without watch mode.
yarn build
Build Strapi admin panel.
yarn strapi
Display all available commands.
You can start by doing:
cd /Users/felixle/Downloads/6github_new/strapi-medusa
yarn develop
Running your Strapi application.
> strapi-medusa@0.1.0 develop
> strapi develop
Building your admin UI with development configuration...
Admin UI built successfully
ApplicationError: The type is required
at getFieldSize (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/field-sizes.js:57:15)
at getDefaultFieldSize (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/utils/configuration/layouts.js:34:10)
at appendToEditLayout (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/utils/configuration/layouts.js:139:27)
at createDefaultEditLayout (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/utils/configuration/layouts.js:56:10)
at createDefaultLayouts (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/utils/configuration/layouts.js:40:11)
at createDefaultConfiguration (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/utils/configuration/index.js:26:20)
at async generateNewConfiguration (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/configuration.js:53:36)
at async Promise.all (index 13)
at async Object.syncConfigurations (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/services/configuration.js:67:5)
at async module.exports [as bootstrap] (/Users/felixle/Downloads/6github_new/strapi-medusa/node_modules/@strapi/plugin-content-manager/server/bootstrap.js:7:3) {
details: {}
}
Не могли бы вы мне помочь?
Спасибо
Проект может работать
3 ответа
Как предположили другие, это не имеет ничего общего с исходным кодом Медузы как таковой. Проблема, с которой вы столкнулись, — это отсутствие поля типа в схеме.
Эта часть кода, из которой вы получаете ошибку, анализирует файлы Schema.json в папках типов контента в src/api/[имя-типа-контента]/content-types/[имя-типа-контента] . В конкретном выбранном вами шаблоне вы заметите, что не все атрибуты в файлах схемы.json имеют поле типа.
Strapi v4 внес серьезные изменения в структуру схемы. Некоторые миграции на версию 4 могут быть применены автоматически, как это произошло с shahednasser/strapi-medusa-template. Но некоторые из них создаются вручную и не были применены к этому каталогу. Вам нужно перенести остальные изменения в файлах схемы в новый формат Strapi v4s и все должно работать.
Для справки, вот фрагмент типа контента поставщика платежей в версии 3, а затем в версии 4.
версия 3:
"regions": {
"via": "payment_providers",
"collection": "region"
}
версия 4:
"regions": {
"type": "relation",
"relation": "manyToMany",
"target": "api::region.region",
"inversedBy": "payment_providers"
}
Некоторые люди уже это сделали, поэтому я взял файлы схемы из этого репозитория и написал простой Python-скрипт для замены всех файлов из упомянутого репозитория на шаблон от shahednasser:
import os
import shutil
# Define the source directory where the new schema.json files are located
source_dir = "src/api"
# Define the target directory where the existing schema.json files are located which should be replaced
target_dir = "strapi-medusa/src/api"
# Iterate over all the subdirectories in the target directory
for subdir, dirs, files in os.walk(target_dir):
for file in files:
# Check if the current file is a schema.json file
if file == "schema.json":
# Define the path to the current schema.json file
current_file_path = os.path.join(subdir, file)
# Extract the name of the content-type
content_type_name = os.path.basename(os.path.dirname(os.path.dirname(subdir)))
# Define the path to the new schema.json file
new_file_path = os.path.join(source_dir, content_type_name, "content-types", content_type_name, file)
# Check if the new schema.json file exists
if os.path.exists(new_file_path):
# Replace the current schema.json file with the new one
shutil.copy(new_file_path, current_file_path)
print(f"Replaced {current_file_path} with {new_file_path}")
Если у вас есть еще вопросы, я рад на них ответить.
РЕДАКТИРОВАТЬ: Сделал проблему и то, что нужно сделать, немного яснее.
Мы не можем решить эту проблему со своей стороны, поскольку она взята из исходного кода Медузы.
Я форматирую данные с помощью функции, а затем импортирую результат в базу данных postgres.
Итак, если вам нужна дополнительная помощь, пожалуйста, сообщите мне.
Наилучшие пожелания
Я сделал форк, который должен исправить эту проблему (и некоторые другие проблемы). Вы можете найти это здесь:
https://github.com/thomcrielaard/strapi-medusa-template.git
Если у вас есть какие-либо проблемы, не стесняйтесь сообщать о них! :)