#reactjs #bitbucket #node-modules #kentico-kontent
#reactjs #bitbucket #модули узлов #kentico-содержимое
Вопрос:
По словам консультанта технической поддержки Kentico, для того, чтобы мое приложение create-react-app отображалось в IE11, мне пришлось изменить следующую строку кода внутри файла node_modules -> kentico-cloud-delivery -> package.json:
"main": "./_bundles/kentico-cloud-delivery-sdk.browser.umd.min.js"
После этого изменения мое приложение react рендерится в моем локальном IE, но проблема в том, как я могу протолкнуть это изменение в bitbucket, чтобы приложение react могло также отображаться в IE11 на сервере.
Что касается того, что обычно мы никогда не помещаем node_modules в bitbucket и не помещаем его в файл .gitignore, не могли бы вы, пожалуйста, сообщить мне, как я могу решить эту проблему. Примечание: Мой проект представляет собой приложение create-react-app.
Комментарии:
1. Не могли бы вы более подробно описать, какие файлы вы отправляете в bitbucket? И как вы выполняете развертывание из bitbucket на хостинг?
2. Вам не следует изменять package.json вашей зависимости. Поскольку ‘kentico-cloud-delivery-sdk.browser.umd.min.js ‘ это довольно стандартный umd javascript, вы можете импортировать его непосредственно в react — вместо того, чтобы использовать ‘импорт из ‘kentico-cloud-delivery’, вы можете выполнить импотенцию непосредственно из ‘kentico-cloud-delivery/_bundles/_bundles/kentico-cloud-delivery-sdk.browser.umd.min’
Ответ №1:
Не отправляя ваши npm-модули на сервер bitbucket, это означает, что запущенное там приложение будет извлекать пакеты из списка в файле, обычно называемом package.json. Итак, вы, вероятно, отправляете файл .json в bitbucket, который содержит всю информацию о зависимостях и который вы можете отредактировать для отображения вашего приложения в IE11.
Приветствия!
Комментарии:
1. Это НЕ обычный package.json, который обычно находится в корне проекта, это kentico-cloud-delivery package.json внутри node_modules, поэтому я думаю, что мне нужно протолкнуть его в Bitbucket, но я не знаю как?
2. В этом случае свяжитесь со своими старшими сотрудниками и расскажите им о вашей конкретной проблеме. Я вижу это так, что вы можете либо протолкнуть свою версию kentico-cloud-delivery, либо сделать PR, если у нее открытый исходный код.
Ответ №2:
Я хотел бы связать проблему, в которой рекомендуемый обходной путь заключается в настройке react-scripts для загрузки соответствующего пакета и связанной проблемы для всего контекста.
Вопрос сам возникает из-за parse5 библиотека не публиковать в ES5 код , чтобы НПМ и поэтому сборка не удается.
- Итак, основной причиной этой проблемы является библиотека parse5.
Возможные решения
1) Общая рекомендация от create-react-app i по обновлению до версии 2 , которая также приведена в разделе часто задаваемых вопросов Kentico Cloud javascript SDK.
2) Если вы хотите применить обходной путь, несмотря на все рекомендации, потому что это ручное изменение автоматически управляемого node_modules
пакета, вам нужно убедиться, что изменение пакета сохраняется на сервере до выполнения сборки. Итак, после npm install
/ yarn
вы должны отредактировать файл package.json в node_modules
.
Скрипт (именованный, т.е. workaround.js
написанный в node) будет выглядеть следующим образом:
const fs = require('fs');
const KCPackagePath = 'node_modules/kentico-cloud-delivery/package.json';
const package = require(KCPackagePath);
package.main = "./_bundles/kentico-cloud-delivery-sdk.browser.umd.min.js"
fs.writeFile(configPath, JSON.stringify(package, undefined, 2), function (err) {
if (err) {
console.error('Error while writing to file: ' KCPackagePath);
throw err;;
}
console.info('Package was successfully updated.')
});
и определите скрипт в package.json
вашем приложении из
{
...
"scripts": {
"workaround": "node workaround.js"
}
...
}
Ответ №3:
Точный ответ на вопрос о том, как игнорировать один файл в репозитории и игнорировать остальные в папке, заключается в использовании !
формата шаблона:
node_modules
!node_modules/kentico-delivery-sdk/package.json
!НО!команда npm install
/ yarn
все равно заменила бы package.json
содержимое