Запуск приложения с угловым 2, созданного локально в Chrome с использованием углового cli без узла сервера

Я сделаю свой Угловой вопрос 2 очень точным.

1. Я использую:

Angular 2, angular-cli: 1.0.0-beta.15, (webpack building) узел: 6.4.0, os: linux x64

2. Что я хочу достичь:

Я хочу создать свой проект таким образом, чтобы после сборки (ng build project-name) я получал статические файлы моего приложения Angular 2, которые я могу запускать непосредственно из chrome без использования ng-сервиса или узла-сервера. Я просто хочу дважды щелкнуть index.html и запустить приложение локально.

3. Тем временем, что я получаю в консоли браузера Chrome, когда я дважды кликнул сгенерированный index.html:

file:///inline.js Не удалось загрузить ресурс: net :: ERR_FILE_NOT_FOUND файл:///styles.b52d2076048963e7cbfd.bundle.js Не удалось загрузить ресурс: net :: ERR_FILE_NOT_FOUND файл:///main.c45bb457f14bdc0f5b96.bundle.js Не удалось загрузить ресурс: net :: ERR_FILE_NOT_FOUND файл:///favicon.ico Не удалось загрузить ресурс: net :: ERR_FILE_NOT_FOUND

  1. Насколько я понимаю, это связано с путями. Встроенное приложение не может найти правильные пути. Поэтому мой вопрос заключается в том, где и как я должен изменить пути в своем приложении или в любых файлах конфигурации сборки, чтобы мое приложение работало, как будто я хотел бы, чтобы он работал так, как я описал в пункте номер 2

  2. Заранее благодарю вас за прямой и полный ответ на эту тему, потому что другие темы не объясняют полный охват этой темы.

Ответы

Ответ 1

Первый шаг:

Запустить команду

ng build

или же

ng build -prod (then it will compact all files for production version)

Второй шаг:

Изменение в index.html

<base href="/"> to <base href="./">

Третий шаг:

Поместите все файлы на сервер (может быть htdocs на localhost или на любой сервер)

Надеюсь, это сработает.

Ответ 2

Решение без сервера:

Первый шаг:

Изменение в index.html:

удалите <base href="/">

Второй шаг:

Изменение в app.module.ts:

import { CommonModule, APP_BASE_HREF, LocationStrategy, HashLocationStrategy} from '@angular/common';

@NgModule({
   providers: [
       { provide: APP_BASE_HREF, useValue: '/' },
       { provide: LocationStrategy, useClass: HashLocationStrategy }
   ]
})

Третий шаг:

Запустить команду

ng build

или же

ng build -prod

Doubleclick dist/index.html чтобы увидеть результат.

Ответ 3

Если вы используете Angular-Cli, вам не нужно вносить изменения в index.html после сборки проекта. Согласно документу Angular-CLi GitHub https://github.com/angular/angular-cli#base-tag-handling-in-indexhtml  вы можете просто изменить аргумент при создании проекта:

    Example: ng build --prod --base-href .

Фактическое использование:

ng build --base-href <base>

вы можете просто ввести конкретный URL вместо базового. В этом примере мы используем. (точка) в качестве аргумента

Ответ 4

Простое решение: измените свой href при сборке.

ng build --prod --base-href .

Теперь вы можете дважды щелкнуть файл index.html, и он будет работать.

Вот пример этой работы: https://mattspaulding.github.io/angular-material-starter/

Ответ 5

Вы должны обслуживать папку /dist с помощью HTTP-сервера. Вы не можете обойти это, потому что загрузка файлов локально не позволяет выполнять код по соображениям безопасности.

Сервер не обязательно должен быть чем-то тяжелым, как Express или даже высокопоставленным минималистским, похожим на HapiJS. Встроенный HTTP-сервер узла будет очень хорош. Если у вас уже установлены Apache, nginx или IIS, вы также можете использовать их для обслуживания своего приложения.

EDIT: Я сделал некоторые нравственные поиски и решил предложить решение, которое лично я бы не использовал, но может быть вам подходит: веб-сервер для расширения Chrome

Ответ 6

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

ng build --prod --base-href ./

Ответ 7

Я рекомендую использовать Expressjs, почему серверы, как xampp, laragon и т.д., Маршруты не работают, я сделал это так: я создал новую папку с сервером имен, внутри скопировал файл index.js, маршрут был бы "src/assets/server/index.js ",

Содержание Index.js

var express = require('express'),
    path = require('path'),
    fs = require('fs');

var app = express();
var staticRoot = __dirname + '/../../';

app.set('port', (process.env.PORT || 80));

app.use(express.static(staticRoot));

app.use(function(req, res, next){
    var accept = req.accepts('html', 'json', 'xml');
    if(accept !== 'html'){
        return next();
    }
    var ext = path.extname(req.path);
    if (ext !== ''){
        return next();
    }
    fs.createReadStream(staticRoot + 'index.html').pipe(res);

});
app.listen(app.get('port'), function() {
    console.log('app running on port', app.get('port'));
});

Ответ 8

Удаление <base href="/"> из index.html работало для меня.

Ответ 9

Вы можете добиться чего-то подобного, используя nw.js, например (или электрон). Я сам создал приложение, которое использует угловой 2 локально с nw.js, и оно работает как шарм;)

nwjs.io

Ответ 10

используйте ng serve --open для сборки приложения и запуска веб-сервера