Невозможно изменить базовую папку для облегченного сервера в приложении Angular 2

Я прохожу 5-минутный краткий обзор Angular 2. Однако мое приложение находится в папке src/, а не в корне репозитория, и когда я запускаю npm start, приложение пытается найти файл index.html в корне. Я прочитал о lite-server, и документация показывает, что он использует BrowserSync, и я могу перенастроить BrowserSync с bs-config.json в своем репозитории. Я сделал это, и вот как выглядит мой конфиг:

{
  "port": 8123,
  "server": { "baseDir": "./src" }
}

Согласно журналу, он использует указанную конфигурацию:

[1] > [email protected] lite E:\GitHub\todo-app-angular2
[1] > lite-server "./bs-config.json"

Я также пробовал переопределить через bs-config.js

module.exports = {
  port: 8123,
  server: {
    baseDir: "./src"
  }
};

Однако приложение Angular по-прежнему открыто на порту 3000 и игнорирует baseDir, определенный в конфигурации. Что я делаю не так?


person Konstantin Dinev    schedule 02.02.2016    source источник
comment
Попробуйте добавить --config path/to/bs-config.json в команду npm start   -  person Sasxa    schedule 02.02.2016
comment
Обязательно используйте lite-server v2 для файла параметров конфигурации синхронизации браузера.   -  person John Papa    schedule 26.02.2016


Ответы (2)


Вы должны использовать файл с именем bs-config.js (вместо bs-config.json), так как lite-server пытается загрузить модуль, используя функцию require. Конфигурация должна быть действительным модулем Node:

module.exports = {
  "port": 8123,
  "server": { "baseDir": "./src" }
};

См. эту строку в исходном коде: https://github.com/johnpapa/lite-server/blob/master/lib/lite-server.js#L20.

Этот файл по умолчанию загружается из папки проекта пользователя.

Изменить

Покопавшись еще немного, первая часть моего ответа основана на коде из github, но не на том, который фактически установлен с использованием npm install (версия 1.3.4)

В этом случае есть два варианта:

  • порт
  • базовый_каталог

Использование этой команды решит вашу проблему:

$ lite-server --baseDir ./src --port 3333

Надеюсь, это поможет вам, Тьерри.

person Thierry Templier    schedule 02.02.2016
comment
Я действительно забыл упомянуть, что я уже пробовал это. Я заменил конфигурацию json на module.export в файле bs-config.js. Это все еще ничего не дало :( На самом деле, когда я добавил это, мой запуск npm завершился ошибкой. - person Konstantin Dinev; 02.02.2016
comment
Я только что попробовал, и он все еще работает с ./ [1] [BS] URL-адреса доступа: [1] ------------- --------- [1] Локальный: localhost:3000 [1] Внешний: xx.xx.xx.xx:3000 [1] ------------ ------------------------ [1] Пользовательский интерфейс: localhost :3001 [1] Внешний интерфейс: xx.xx.xx.xx:3001 [1] ------------------------------------ [1] [BS] Раздача файлов из: ./ - person Konstantin Dinev; 02.02.2016
comment
Какую версию lite-сервера вы используете? - person Thierry Templier; 02.02.2016
comment
облегченный сервер: ^ 1.3.4 - person Konstantin Dinev; 02.02.2016
comment
Мне то же! Если вы посмотрите на файл node_modules/lite-server/lib/lite-server.js, вы увидите, что argv.baseDir (--baseDir) используется для базовой папки и argv.port для порта (--port). Вы можете добавить несколько console.log в файл, чтобы увидеть полученные значения... Я сделал новый тест, и у меня работает следующая команда lite-server --baseDir ./src --port 3333... - person Thierry Templier; 02.02.2016
comment
Хорошо, прошу прощения. Это действительно сработало. Я добавил параметры в свой npm start, но я должен был добавить их в свой npm lite, который вызывается npm start. - person Konstantin Dinev; 02.02.2016
comment
@ThierryTemplier Можно ли настроить файлы, которые просматриваются, с помощью синхронизации браузера с помощью сценария lite-server? - person Shawn Northrop; 26.02.2016
comment
@ShawnNorthrop да, вы можете использовать параметр --files. Укажите шаблоны файлов на этом уровне. Что-то вроде ./**/*.js... - person Thierry Templier; 26.02.2016
comment
Обязательно используйте lite-server v2 для файла параметров конфигурации синхронизации браузера. - person John Papa; 26.02.2016
comment
@ThierryTemplier У меня такая же проблема, не могли бы вы сообщить мне, где мне использовать $ lite-server --baseDir ./src --port 3333 . У меня есть версия npm 3.7.3 в Windows. - person Ayaz Shah; 31.07.2016

Ответ от Thierry Templier не совсем правильный (больше), вы можете использовать конфигурацию bs-config.json или bs-config.js для настройки конфигурации синхронизации браузера. Это то, что я придумал изначально для быстрого запуска angular2 пример с поддержкой компиляции JIT(Just-In-Time) и AOT(Ahead-Of-Time) (bs-config.json)

{
  "port": 8000,
  "server": ["app", "."]
}

для размещения проекта из нескольких каталогов.

Однако мне это решение не понравилось, потому что при перезаписи раздела server в файле json одновременно перезаписывалась конфигурация по умолчанию middleware.

Поэтому я остановился на следующем подходе: я взял значение по умолчанию config-defaults.js файлов lite-server и вместо этого изменил его (bs-config.js):

'use strict';
var fallback = require('connect-history-api-fallback');
var log = require('connect-logger');
/*
 | For up-to-date information about the options:
 |   http://www.browsersync.io/docs/options/
 */
module.exports = {
  port: 8000,
  injectChanges: false, // workaround for Angular 2 styleUrls loading
  filters: ['./**/*.{html,htm,css,js}'],
  watchOptions: {
    ignored: 'node_modules'
  },
  server: ['./', 'app'],
  middleware: [
    log({ format: '%date %status %method %url' }),
    fallback({
        index: '/index.html',
        htmlAcceptHeaders: ['text/html', 'application/xhtml+xml'] // systemjs workaround
    })
  ]
};
person Evgeny Bobkin    schedule 15.12.2016