SSR принимает неправильное окружение в Angular - PullRequest
0 голосов
/ 31 августа 2018

У меня есть приложение Angular 6 с SSR. Я заметил, что в SSR в server.js (не происходит без SSR) он принимает неверный переменный файл environmentmanet (environment.ts) один раз (

)

это мир скомпилированного server.js var environment_1 = __webpack_require__(/*! ../../../../environments/environment */ "./src/environments/environment.ts"); и это естественно, потому что при компиляции браузера angular.json меняет местами файлы

 "fileReplacements": [
                            {
                                "replace": "src/environments/environment.ts",
                                "with": "src/environments/environment.prod.ts"
                            }
                        ]

однако, когда webpack компилирует сервер, он просто берет enironment.ts, который является конфигурацией разработчика

/***/ "./src/environments/environment.ts":
/*!*****************************************!*\
  !*** ./src/environments/environment.ts ***!
  \*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";

// The file contents for the current environment will overwrite these during build.
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
// The list of which env maps to which file can be found in `.angular-cli.json`.
Object.defineProperty(exports, "__esModule", { value: true });
exports.environment = {
    production: false,
    apiUrl: 'dev url',
    googleMapsApiKey: 'dev key'
};


/***/ }),

также вы можете увидеть устаревшие предложения по использованию углов ng build --env=prod, но я использую ng build --configuration=prod, также попробовал просто ng build --prod.

Есть идеи, как решить эту проблему?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Я решил эту проблему. Вам необходимо проверить файл angular.json. В разделе сервера вам нужно "server": { "builder": "@angular-devkit/build-angular:server", "options": { "outputPath": "./dist/server", "main": "./src/client/main.server.ts", "tsConfig": "./src/client/tsconfig.server.json" }, "configurations": { "production": { "fileReplacements": [ { "replace": "src/client/environments/environment.ts", "with": "src/client/environments/environment.prod.ts" } ] }, "cloud": { "fileReplacements": [ { "replace": "src/client/environments/environment.ts", "with": "src/client/environments/environment.cloud.ts" } ] } } }

0 голосов
/ 23 января 2019
  1. Создание конфигурации для сборки сервера в angular.json

Пример кода: "server": { "builder": "@angular-devkit/build-angular:server", "options": { "outputPath": "dist/server", "main": "src/main.server.ts", "tsConfig": "src/tsconfig.server.json" }, "configurations": { "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ] } } }

  1. Отредактируйте файл package.json, чтобы использовать созданную выше конфигурацию сборки. Согласно угловой документации, в объекте сценариев должен быть ключ с именем «build: client-and-server-bundles». Измените "ng build --prod && ng run app: server" на "ng build --prod && ng run app: сервер -c production ".

Пример кода:

"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
"serve:ssr": "node dist/server",
"build:client-and-server-bundles": "ng build --prod && ng run app:server -c production",
"webpack:server": "webpack --config webpack.server.config.js --progress --colors"

}

0 голосов
/ 31 августа 2018

Я решил это. Я не добавил конфигурации с заменой файла в раздел сервера в файле angular.json.

...