Angular 似乎将开发依赖项构建到通用包中?
Angular seems to build dev dependencies into universal bundle?
我正在使用 typegoose 来统一我的界面 + 数据库模式在 ~6 个应用程序之间共享。它帮助我保持数据结构的一致性。
现在这意味着我 Angular 应用程序中的大部分 types/interfaces 来自 external project.
因此我有:
"typegoose": "^5.9.0",
"@types/mongoose": "^5.5.17",
"mongoose": "^5.6.12",
"@tlabs/models": "^1.7.13",
添加为开发依赖项。一切正常,我什至可以构建,但是当我尝试使用通用构建时,我可以看到此警告:
WARNING in ./node_modules/mongoose/lib/index.js 11:28-64
Critical dependency: the request of a dependency is an expression
x5 倍大约 mongodb/mongoose
当我检查我的 lambda 函数日志时,我可以看到:
2019-09-17T14:56:59.691Z undefined ERROR (node:8) DeprecationWarning: This Package got moved, please use `@hasezoey/typegoose` | github:hasezoey/typegoose
来自 typegoose,这让我很困惑。
我 100% 只使用 as 类型,如果我尝试通过使用其中一种类型实例化 class 对象来使用它,整个应用程序将根本无法运行。
关于这里的 webpack 配置,我是否遗漏了什么?
我在处理 angular 通用数据库和其他 SQL 数据库时也遇到了类似的错误。但是,有一个解决方案至少对我有用。
那就是 webpack-node-externals
包。这只会让 webpack 忽略你的 node_modules 文件夹。
Link 到 NPM 页面 >> https://www.npmjs.com/package/webpack-node-externals
假设您 webpack.server.config.js
中的所有其他内容应该可以解决这些错误并使您的包大小小得多。 (请记住,在部署到其他环境时,您需要包含 node_modules 文件夹)
简要教程
npm i webpack-node-externals
- 在文本编辑器中打开
webpack.server.config.js
- 将该文件格式化为如下所示:
module.exports = env => {
return {
mode: "production",
entry: {
// This is our Express server for Dynamic universal
server: "./server.ts"
},
externals: {
"./dist/server/main": 'require("./server/main")'
},
target: "node",
node: {
__dirname: false,
__filename: false
},
externals: [nodeExternals()], // <======LOOK HERE======|
resolve: { extensions: [".ts", ".js"] },
optimization: {
minimize: false
},
output: {
// Puts the output at the root of the dist folder
path: path.join(__dirname, "dist"),
filename: "[name].js"
},
module: {
noParse: /polyfills-.*\.js/,
rules: [
{ test: /\.ts$/, loader: "ts-loader" },
{
// Mark files inside `@angular/core` as using SystemJS style dynamic imports.
// Removing this will cause deprecation warnings to appear.
test: /(\|\/)@angular(\|\/)core(\|\/).+\.js$/,
parser: { system: true }
}
]
},
plugins: [
new webpack.ContextReplacementPlugin(
// fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?angular(\|\/)core(.+)?/,
path.join(__dirname, "src"), // location of your src
{} // a map of your routes
),
new webpack.ContextReplacementPlugin(
// fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?express(\|\/)(.+)?/,
path.join(__dirname, "src"),
{}
),
]
};
};
我正在使用 typegoose 来统一我的界面 + 数据库模式在 ~6 个应用程序之间共享。它帮助我保持数据结构的一致性。
现在这意味着我 Angular 应用程序中的大部分 types/interfaces 来自 external project.
因此我有:
"typegoose": "^5.9.0",
"@types/mongoose": "^5.5.17",
"mongoose": "^5.6.12",
"@tlabs/models": "^1.7.13",
添加为开发依赖项。一切正常,我什至可以构建,但是当我尝试使用通用构建时,我可以看到此警告:
WARNING in ./node_modules/mongoose/lib/index.js 11:28-64
Critical dependency: the request of a dependency is an expression
x5 倍大约 mongodb/mongoose
当我检查我的 lambda 函数日志时,我可以看到:
2019-09-17T14:56:59.691Z undefined ERROR (node:8) DeprecationWarning: This Package got moved, please use `@hasezoey/typegoose` | github:hasezoey/typegoose
来自 typegoose,这让我很困惑。
我 100% 只使用 as 类型,如果我尝试通过使用其中一种类型实例化 class 对象来使用它,整个应用程序将根本无法运行。
关于这里的 webpack 配置,我是否遗漏了什么?
我在处理 angular 通用数据库和其他 SQL 数据库时也遇到了类似的错误。但是,有一个解决方案至少对我有用。
那就是 webpack-node-externals
包。这只会让 webpack 忽略你的 node_modules 文件夹。
Link 到 NPM 页面 >> https://www.npmjs.com/package/webpack-node-externals
假设您 webpack.server.config.js
中的所有其他内容应该可以解决这些错误并使您的包大小小得多。 (请记住,在部署到其他环境时,您需要包含 node_modules 文件夹)
简要教程
npm i webpack-node-externals
- 在文本编辑器中打开
webpack.server.config.js
- 将该文件格式化为如下所示:
module.exports = env => {
return {
mode: "production",
entry: {
// This is our Express server for Dynamic universal
server: "./server.ts"
},
externals: {
"./dist/server/main": 'require("./server/main")'
},
target: "node",
node: {
__dirname: false,
__filename: false
},
externals: [nodeExternals()], // <======LOOK HERE======|
resolve: { extensions: [".ts", ".js"] },
optimization: {
minimize: false
},
output: {
// Puts the output at the root of the dist folder
path: path.join(__dirname, "dist"),
filename: "[name].js"
},
module: {
noParse: /polyfills-.*\.js/,
rules: [
{ test: /\.ts$/, loader: "ts-loader" },
{
// Mark files inside `@angular/core` as using SystemJS style dynamic imports.
// Removing this will cause deprecation warnings to appear.
test: /(\|\/)@angular(\|\/)core(\|\/).+\.js$/,
parser: { system: true }
}
]
},
plugins: [
new webpack.ContextReplacementPlugin(
// fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?angular(\|\/)core(.+)?/,
path.join(__dirname, "src"), // location of your src
{} // a map of your routes
),
new webpack.ContextReplacementPlugin(
// fixes WARNING Critical dependency: the request of a dependency is an expression
/(.+)?express(\|\/)(.+)?/,
path.join(__dirname, "src"),
{}
),
]
};
};