Я конвертирую свой существующий проект 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, сборка самого сервера экспресс некаким-либо образом манипулирует веб-пакетом.