Проблема выполнения Angular Universal с lodash-ов как зависимость - PullRequest
0 голосов
/ 28 ноября 2018

Я конвертирую свой существующий проект Angular с бэкэндом Express в Angular Universal.Я сталкиваюсь с ошибкой

<Project>\node_modules\lodash-es\cloneDeep.js:1
(function (exports, require, module, __filename, __dirname) { import baseClone from './_baseClone.js';
                                                              ^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.lodash-es/cloneDeep (<Project>\dist\server\main.js:10303:18)

С Как правильно использовать lodash-es в Angular Universal? Я понимаю, что мне нужен "белый список" lodash-es.Таким образом, я установил @angular-builders/custom-webpack, чтобы изменить мой angular.json.Я создал конфигурацию веб-пакета как таковую

const nodeExternals = require('webpack-node-externals');

module.exports = {
    externals: [
        nodeExternals({
            whitelist: [/^lodash-es/]
        })
    ]
}

и изменил свой angular.json как

"architect": {
    "server": {
      "builder": "@angular-builders/custom-webpack:server",
      "options": {
        "customWebpackConfig": {
          "path": "./universal-webpack.config.js",
          "mergeStrategies": { "loaders": "replace" }
        },
        "outputPath": "dist/server",
        "main": "src/main.server.ts",
        "tsConfig": "src/tsconfig.server.json"
      }
    }

Я на Angular CLI 6 и ng eject заблокирован, поэтому я не могу проверить сгенерированныйwebpack, но приведенная выше попытка ничего не делает для исправления ошибки.

Примечание: Сервер закодирован в js, а не в Typescript, поэтому, хотя main.server.ts подвергается webpack, сборка самого сервера экспресс некаким-либо образом манипулирует веб-пакетом.

1 Ответ

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

Произошла ошибка в конфигурации слияния веб-пакета.

"customWebpackConfig": {
    "path": "./universal-webpack.config.js",
    "mergeStrategies": { "externals": "replace" }
}

- это правильный объект конфигурации, в котором я заменил "mergeStrategies": { "loaders": "replace" } на "mergeStrategies": { "externals": "replace" }

...