Настройте один проект для Node / Express / Typescript и Angular - PullRequest
0 голосов
/ 04 декабря 2018

Я - разработчик .NET (ASP.NET Core и т. Д.). Поэтому я привык работать над одним проектом с использованием как серверного, так и клиентского кода.Я хочу сделать то же самое с Node / Express (используя Typscript) и Angular.

Я прошел учебники по Angular с использованием его CLI и с Node / Express с использованием его генератора.Поэтому я понимаю, как заставить их работать независимо, но я не уверен, как структурировать один проект с обоими.

Из опыта я ожидаю что-то вроде этого:

  • .git
  • node_modules
  • client
    • src
    • config, относящихся к Angular
  • server
    • src
    • конфиг, связанный с Node / Express / Typescript
  • package.json
  • конфиг связанныйпроектировать целиком

Но в стеке MEAN столько движущихся частей, что это сбивает с толку.Я не уверен, куда помещать различные файлы машинописи, файлы конфигурации и т. Д. И как запускать серверы разработки для каждого, учитывая, что node_modules на один уровень выше.

Существуют вопросы по этому поводу, которыеявляются самоуверенными, или критикуют это, или устарели (мир Узла меняется так быстро!).Однако то, что я хочу знать, отличается:

Как настроить Node / Express (используя Typescript) и Angular из одного проекта:

  • , чтобы они могли быть зафиксированы в одном и том же git-репо
  • , чтобы я мог работать с ними, используя тот же экземпляр IDE
  • , чтобы я могпо-прежнему использовать экспресс-и угловые инструменты (CLI / генератор / и т. д.)
  • , поэтому во время разработки серверы ng serve и node app по-прежнему работают
  • (любой пример кода или репозитории тоже приветствуются)

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

То, что вы предложили, прекрасно.

Как правило, все папки сервера находятся на корневом уровне (src/, lib/ и т. Д.) С папкой client/, содержащей весь клиентский проект, или выделенной *Папка 1006 * и выделенная папка client/ с очень небольшим количеством на верхнем / корневом уровне.

Вот пример полной базы стека Стефена Гридера / кодовой базы React (такой же принцип будет применяться для Node / Angular) - https://github.com/StephenGrider/FullstackReactCode. Он использует подход первого, сохраняя корневой уровень проекта для сервера с отдельной папкой client/.

0 голосов
/ 04 декабря 2018

Вы можете использовать такую ​​настройку:

-client/         // for your angular application (frontend)
-node_modules/   // node modules
-routes/         // route files for your express
-app.js          // your main app
-package.json    // your package.json with all the dependencies and so on

Создайте папку проекта и запустите npm init , которая автоматически создаст для вас package.json ,Затем вы можете создать клиентское приложение через ng new client.

Затем вы просто запускаете git init в корневой папке вашего проекта.Если вы не хотите, чтобы определенные части проекта были зафиксированы, используйте файл .gitignore .

В вашем app.js бэкэнда вашего узла просто требуйте Express и другие соответствующие пакеты, такие как:

var express = require('express');
var path = require( "path" );
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var cors = require('cors');
var app = express();
var port = 65500;
var router = express.Router();
....
..

и определите свои express-маршруты

var authRouter = require('./routes/auth')(router);
var servicesRouter = require('./routes/services')(router);
....
..

app.use('/auth', authRouter); // Route to authenticate login attempt 
app.use('/services', servicesRouter); // Route to perform other services
....
..
// wildcard:
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname + '/public/index.html'));
});

// INFO: Start the node server */
app.listen(port, () => console.log(`Node's Express ice-dashboard-new is listening on 
Port ${port}..`));

Например, в / client / src / app / components вы можете создать любой компонент с помощью CLI через ng generate component someComponentName, а Angular CLI сделает всю магию за вас.(создание .html .css / .scss, .ts & .spec.ts и добавление его в app.modules.ts).

То же самое работает для сервисов , подключающих шрифт к бэкэнду.Просто используйте CLI, как ng generate service someServiceName, но имейте в виду, что вы должны добавить его к «поставщикам» @NgModule-декларации в app.module.ts.

Если у вас есть дополнительный бэкэнд -Ресурсы просто создают папку в корневой папке вашего приложения и дополнительно требуют их в вашем app.js, чтобы использовать их (например, / config или / helperz и т. д.)

Для внешних ресурсов (например,изображения, файлы перевода i18n или что-либо еще) используйте папку / client / src / assets.

По сути, ваше приложение состоит из двух частей - серверной части узла, обслуживающей приложение и предоставляющей маршруты для внутренних операций, и приложения углового интерфейса (html, css / scss & js), вот небольшая диаграмма, иллюстрирующая эту настройкудля лучшего понимания.

enter image description here

Очень удобным инструментом является Nodemon , утилита, которая будет отслеживать любые изменения в вашем источнике иавтоматически перезапустите ваш сервер.Идеально подходит для развития.

Просто используйте nodemon вместо node для запуска вашего кода, и теперь ваш процесс автоматически перезапустится, когда ваш код изменится.Чтобы установить, получите файл node.js, затем из своего терминала установите его глобально с опцией -g через:

 npm install -g nodemon

Чтобы лучше понять, посмотрите на эти примеры того, как другие настроилиих проект:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...