Как изменить папку `src` на что-то другое в приложении create-реагировать

Я хотел бы знать, возможно ли с помощью react-script переименовать src во что-то другое, например в папку app.


person rstormsf    schedule 09.06.2017    source источник
comment
Не могли бы вы рассказать нам больше о том, чего вы пытаетесь достичь? Вы можете просто использовать fs.rename или просто mv? Вы хотите изменить имя каталога src на app и реагировать на скрипт, чтобы он продолжал работать как положено?   -  person sudo bangbang    schedule 14.06.2017
comment
Это должно быть возможно, но вам нужно будет извлечь и изменить все части, где src встречается во внутренних компонентах, на новое имя папки.   -  person glennreyes    schedule 18.06.2017
comment
Вы можете использовать команду mv для перемещения каталога? И здесь я просто щелкаю и перетаскиваю его в своем причудливом графическом интерфейсе, но почему-то реагирующий скрипт больше не работает, но зачем мне это? Мы не задаем вопросы на веб-сайте, который помогает разработчикам решать проблемы.   -  person Coded Monkey    schedule 30.11.2018


Ответы (7)


Вы можете использовать react-app-rewired, чтобы переопределить конфигурацию путей реагирования. . В моем случае я могу изменить пути в файле config-overrides.js.

const path = require('path');

module.exports = {
    paths: function (paths, env) {        
        paths.appIndexJs = path.resolve(__dirname, 'mysrc/client.js');
        paths.appSrc = path.resolve(__dirname, 'mysrc');
        return paths;
    },
}
person Cong Dan Luong    schedule 11.02.2019
comment
Для тех, кто использует customize-cra, вам все равно придется делать то же самое. См.: github.com/goblin- лаборатория/cra-multi-page-template/blob/ - person kumarharsh; 27.01.2020
comment
для меня мне также пришлось добавить следующий путь paths.appTypeDeclarations = path.resolve(__dirname, 'ui/typings'); - person Talha Junaid; 22.03.2020

Я знаю, что это старый вопрос, но я все равно опубликую свое решение, так как оно может кому-то помочь.

Я заработал, выполнив следующие действия:

  1. Выполнить npm run eject. Это раскрывает некоторые элементы внутренней конфигурации из приложения create-реагировать.
  2. Откройте свой package.json и отредактируйте соответствующие регулярные выражения в jest.collectCoverageFrom и jest.testMatch, чтобы они соответствовали вашему тестовому пути.
  3. Измените пути для appSrc, appIndexJs и testsSetup в файле config/paths.js
person T0astBread    schedule 25.04.2018
comment
Это то, что glennreyes упомянул в своем комментарии к вопросу - person T0astBread; 25.04.2018
comment
Я сделал это, не выполняя npm run eject, и это не сработало, так какова на самом деле цель этой команды, актуальна ли она? - person moctarjallo; 18.12.2018

Не уверен, что это отвечает на ваш вопрос, но я попробую. Моя структура каталогов выглядит так:

/root
--/app
----/build
----/public
------index.html
----/src
------index.js
app.js
package.js

В моем /root/package.json есть это:

  "scripts": {
    "build": "cd app && npm run build",
    "start": "node app.js",
    "serve": "cd app && npm run start"
  },
  "dependencies": {
    "express": "^4.8.0",
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "react-scripts": "^1.0.17"
  },

и мой /root/app/package.json выглядит так:

  "scripts": {
    "build": "react-scripts build",
    "start": "set PORT=3000 && react-scripts start"
  },
  "dependencies": {
    "react-scripts": "^1.0.17"
  }

Чтобы запустить версию Reactjs для разработки, в /root я могу просто запустить npm serve для обслуживания версии для разработчиков.

Я использую node и Express, поэтому для запуска рабочей версии Reactjs в /root я могу просто запустить сборку npm, чтобы создать каталог /root/app/build. У меня есть роутер, который выглядит так:

var options = {root : config.siteRoot + '/app/build'};

mainRte.all('/', function(req, res) {
    console.log('In mainRte.all Root');
    res.sendFile('index.html', options);
});

поэтому, когда я запускаю /root/app.js в узле и перехожу к «/», он открывает /root/app/public/index.html, а затем /root/app/index.js.

Надеюсь, это поможет.

person Joe Shmoe    schedule 03.01.2018

Ответ T0astBread почти идеален, но есть дополнительная ссылка на src, которую он пропустил внутри modules.js.

Конкретно:

    return {
      src: paths.appSrc,
    };

необходимо изменить на

    return {
      newSrcName: paths.appSrc,
    };
person thedayturns    schedule 31.07.2020

Это отличный вопрос, и правильный сценарий для изменения имени этой папки — перенос старых проектов реагирования на CRA.

Вот еще один подход, который я нашел, который ломает меньше вещей:

Создайте символическую ссылку с помощью:

ls -s ./app src

Затем добавьте это в config-overrides.js, чтобы веб-пакет мог обрабатывать символическую ссылку:

module.exports = (config, ...rest) => {
    return { ...config, resolve: { ...config.resolve, symlinks: false } };
};

Затем установите react-app-rewired и добавьте это в ваш package.json:

запуск: запуск реакции-приложения,

person David    schedule 01.02.2021

Создайте файл в корне вашего проекта, вставьте этот код и запустите.

const fs = require('fs');
const path = './node_modules/react-scripts/config/paths.js';
const folder = 'app';

fs.readFile(path, 'utf8', (err, data) => {
 if (err) throw err;
 data = data.replace(/src/g, folder);
 fs.writeFile(path, data, 'utf8');
});

person IT VLOG    schedule 20.09.2017

Возможно, символическая ссылка может решить ваши причины, по которым вы хотите это сделать:

ln -s ./src/ ./app

Папка src останется, но вы сможете работать с ней, как если бы это была папка app.

Если, как и я, вы используете vscode, вы также можете сделать:

Cmd-shift-p найдите настройки рабочей области и добавьте следующее:

{
  "files.exclude": {
      "src/": true
  }
}

Вы можете сделать то же самое с другими редакторами

person Dan    schedule 18.04.2018
comment
Не уверен, почему за это проголосовали, но в то время это действительно работало для меня в проекте... - person Dan; 23.02.2021
comment
То, что что-то имеет запланированный эффект, не означает, что это лучший способ сделать это. Если у вас на столе сидит муха, вы можете убить ее газетой. Вы также можете использовать огнемет или ящик с динамитом. Они также убьют муху, но с небольшими побочными эффектами. И эта символическая ссылка просто плохая. И нет, я не минусовал. - person sjngm; 18.06.2021