如何?如何捆绑包括node_module的NestJS项目以用于脱机应用程序?
const path = require('path');
module.exports = {
entry: path.join(__dirname, 'dist/main.js'),
target: 'node',
output: {
filename: 'compiled.js',
path: __dirname,
},
resolve: {
alias: {
node_modules: path.join(__dirname, 'node_modules'),
},
extensions: ['.js'],
},
};
{
"name": "kai-brs",
"version": "0.9.1",
"author": "Sovgut Sergey",
"private": true,
"scripts": {
"build:webpack": "rimraf dist && tsc -p tsconfig.build.json && webpack dist/main.js -o dist/main.bundle.js --mode=production",
"build": "tsc -p tsconfig.build.json",
"format": "prettier --write \"src/**/*.ts\"",
"start": "ts-node -r tsconfig-paths/register src/main.ts",
"start:dev": "nodemon",
"start:debug": "nodemon --config nodemon-debug.json",
"prestart:prod": "rimraf dist && npm run build",
"start:prod": "node dist/main.js",
"lint": "tslint -p tsconfig.json -c tslint.json",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@nestjs/common": "^6.0.0",
"@nestjs/core": "^6.0.0",
"@nestjs/graphql": "^6.0.5",
"@nestjs/platform-express": "^6.0.0",
"@nestjs/typeorm": "^6.0.0",
"@types/dotenv": "^6.1.1",
"apollo-server-express": "^2.4.8",
"dotenv": "^7.0.0",
"graphql": "^14.2.1",
"graphql-tools": "^4.0.4",
"joi": "^14.3.1",
"mssql": "^5.0.5",
"multer": "^1.4.1",
"public-ip": "^3.0.0",
"reflect-metadata": "^0.1.12",
"request": "^2.88.0",
"request-promise": "^4.2.4",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3",
"screenshot-desktop": "^1.7.0",
"typeorm": "^0.2.16",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0"
},
"devDependencies": {
"@nestjs/testing": "^6.0.0",
"@types/express": "^4.16.1",
"@types/jest": "^23.3.13",
"@types/joi": "^14.3.2",
"@types/node": "^10.12.18",
"@types/supertest": "^2.0.7",
"jest": "^23.6.0",
"nodemon": "^1.18.9",
"prettier": "^1.15.3",
"supertest": "^3.4.1",
"ts-jest": "^23.10.5",
"ts-loader": "^5.3.3",
"ts-node": "^7.0.1",
"tsconfig-paths": "^3.7.0",
"tslint": "5.12.1",
"typescript": "^3.2.4"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
WARNING in ./node_modules/public-ip/node_modules/got/source/request-as-event-emitter.js 72:18-25
Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
@ ./node_modules/public-ip/node_modules/got/source/as-promise.js
@ ./node_modules/public-ip/node_modules/got/source/create.js
@ ./node_modules/public-ip/node_modules/got/source/index.js
@ ./node_modules/public-ip/index.js
@ ./dist/service/illumenator.service.js
@ ./dist/service/illumenator.module.js
@ ./dist/service.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js 107:27-40
Critical dependency: the request of a dependency is an expression
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js 112:23-85
Critical dependency: the request of a dependency is an expression
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/@nestjs/common/utils/load-package.util.js 8:39-59
Critical dependency: the request of a dependency is an expression
@ ./node_modules/@nestjs/common/serializer/class-serializer.interceptor.js
@ ./node_modules/@nestjs/common/serializer/index.js
@ ./node_modules/@nestjs/common/index.js
@ ./dist/service.module.js
@ ./dist/main.js
WARNING in ./node_modules/app-root-path/lib/app-root-path.js 14:10-56
Critical dependency: the request of a dependency is an expression
@ ./node_modules/app-root-path/index.js
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/parse5/lib/index.js 55:23-49
Critical dependency: the request of a dependency is an expression
@ ./node_modules/cli-highlight/dist/index.js
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/express/lib/view.js 81:13-25
Critical dependency: the request of a dependency is an expression
@ ./node_modules/express/lib/application.js
@ ./node_modules/express/lib/express.js
@ ./node_modules/express/index.js
@ ./node_modules/@nestjs/platform-express/adapters/express-adapter.js
@ ./node_modules/@nestjs/platform-express/adapters/index.js
@ ./node_modules/@nestjs/platform-express/index.js
@ ./dist/service/illumenator.controller.js
@ ./dist/service/illumenator.module.js
@ ./dist/service.module.js
@ ./dist/main.js
WARNING in ./node_modules/@nestjs/core/helpers/load-adapter.js 8:39-63
Critical dependency: the request of a dependency is an expression
@ ./node_modules/@nestjs/core/nest-factory.js
@ ./node_modules/@nestjs/core/index.js
@ ./dist/main.js
WARNING in ./node_modules/optional/optional.js 6:11-26
Critical dependency: the request of a dependency is an expression
@ ./node_modules/@nestjs/core/nest-application.js
@ ./node_modules/@nestjs/core/index.js
@ ./dist/main.js
WARNING in ./node_modules/keyv/src/index.js 18:14-40
Critical dependency: the request of a dependency is an expression
@ ./node_modules/cacheable-request/src/index.js
@ ./node_modules/public-ip/node_modules/got/source/request-as-event-emitter.js
@ ./node_modules/public-ip/node_modules/got/source/as-promise.js
@ ./node_modules/public-ip/node_modules/got/source/create.js
@ ./node_modules/public-ip/node_modules/got/source/index.js
@ ./node_modules/public-ip/index.js
@ ./dist/service/illumenator.service.js
@ ./dist/service/illumenator.module.js
@ ./dist/service.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'ioredis' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'mongodb' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'mysql' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'mysql2' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'oracledb' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'pg' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'pg-native' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'pg-query-stream' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/driver/react-native/ReactNativeDriver.js
Module not found: Error: Can't resolve 'react-native-sqlite-storage' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\driver\react-native'
@ ./node_modules/typeorm/driver/react-native/ReactNativeDriver.js
@ ./node_modules/typeorm/driver/DriverFactory.js
@ ./node_modules/typeorm/connection/Connection.js
@ ./node_modules/typeorm/connection/ConnectionManager.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'redis' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'sql.js' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
WARNING in ./node_modules/typeorm/platform/PlatformTools.js
Module not found: Error: Can't resolve 'sqlite3' in 'c:\Users\Essential\Documents\kai-brs\node_modules\typeorm\platform'
@ ./node_modules/typeorm/platform/PlatformTools.js
@ ./node_modules/typeorm/index.js
@ ./dist/server.module.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/core/nest-factory.js
Module not found: Error: Can't resolve '@nestjs/microservices' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\core'
@ ./node_modules/@nestjs/core/nest-factory.js 41:115-147
@ ./node_modules/@nestjs/core/index.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/core/nest-application.js
Module not found: Error: Can't resolve '@nestjs/microservices' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\core'
@ ./node_modules/@nestjs/core/nest-application.js 101:115-147
@ ./node_modules/@nestjs/core/index.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/common/cache/cache.providers.js
Module not found: Error: Can't resolve 'cache-manager' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\common\cache'
@ ./node_modules/@nestjs/common/cache/cache.providers.js 10:103-127
@ ./node_modules/@nestjs/common/cache/cache.module.js
@ ./node_modules/@nestjs/common/cache/index.js
@ ./node_modules/@nestjs/common/index.js
@ ./dist/service.module.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/common/pipes/validation.pipe.js
Module not found: Error: Can't resolve 'class-transformer' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\common\pipes'
@ ./node_modules/@nestjs/common/pipes/validation.pipe.js 43:104-132
@ ./node_modules/@nestjs/common/pipes/index.js
@ ./node_modules/@nestjs/common/index.js
@ ./dist/service.module.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/common/serializer/class-serializer.interceptor.js
Module not found: Error: Can't resolve 'class-transformer' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\common\serializer'
@ ./node_modules/@nestjs/common/serializer/class-serializer.interceptor.js 28:116-144 29:8-36
@ ./node_modules/@nestjs/common/serializer/index.js
@ ./node_modules/@nestjs/common/index.js
@ ./dist/service.module.js
@ ./dist/main.js
ERROR in ./node_modules/@nestjs/common/pipes/validation.pipe.js
Module not found: Error: Can't resolve 'class-validator' in 'c:\Users\Essential\Documents\kai-brs\node_modules\@nestjs\common\pipes'
@ ./node_modules/@nestjs/common/pipes/validation.pipe.js 42:100-126
@ ./node_modules/@nestjs/common/pipes/index.js
@ ./node_modules/@nestjs/common/index.js
@ ./dist/service.module.js
@ ./dist/main.js
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! kai-brs@0.9.1 build:webpack: `rimraf dist && tsc -p tsconfig.build.json && webpack dist/main.js -o dist/main.bundle.js --mode=production`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the kai-brs@0.9.1 build:webpack script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Essential\AppData\Roaming\npm-cache\_logs\2019-04-09T09_19_07_825Z-debug.log
The terminal process terminated with exit code: 2
或者告诉我一个用于在node.js上开发 windows服务的好框架,该服务具有脚手架,并且内置到单个文件中。 (必须将程序集包括所有依赖项,即整个node_modules文件夹,因为要安装此服务的PC 没有Internet 才能使用npm
)
答案 0 :(得分:1)
@SergeySovgut:我不确定您是否已经设法使用webpack添加自定义配置。但是这是我目前在prj中使用的一个
const nodeExternals = require('webpack-node-externals');
var terserPlugin = require('terser-webpack-plugin');
var uglifyJsPlugin = require('uglifyjs-webpack-plugin');
var dotEnvPlugin = require('dotenv-webpack');
module.exports = function(options) {
return {
...options,
entry: [ './src/main.ts'],
watch: false,
resolve: {
extensions: ['.ts', '.js', '.jade']
},
externals: [
nodeExternals(),
],
module: {
rules: [
...options.module.rules,
{
test: /\.handlebars$/,
loader: 'handlebars-loader',
options: {
knownHelpersOnly: false,
inlineRequires: /\/assets\/(:?images|audio|video)\//ig,
partialDirs: [path.join(__dirname, './src/views/email/partials')],
},
}
]
},
plugins: [
...options.plugins,
new webpack.HotModuleReplacementPlugin(),
new webpack.WatchIgnorePlugin([/\.js$/, /\.d\.ts$/]),
new dotEnvPlugin({
path: './config/development/.env',
safe: true,
systemvars: true,
silent: true,
defaults: false
}), new webpack.DefinePlugin({
'process.env.NODE_ENV': 'dev',
'process.env.DEBUG': 'debug'
}),new webpack.WatchIgnorePlugin([/\.js$/, /\.d\.ts$/]),
],
};
};
简而言之,nest附带了webpack。一些规则已预先设置,例如,ts-loader已自动配置为将.ts转换为.js文件。因此,我们所需要做的就是扩展nestjs已经提供的选项,然后在其之上编写我们的自定义配置。
我相信大多数配置都是简单明了的,可以通过webpack文档轻松获得
要运行文件,请配置如下脚本 ->`“ build:webpack:dev”:“ rimraf dist && nest build --watch --webpack webpack.dev.config.js”
然后运行npm run build:webpack:dev
更多详细信息here from official docs
希望有帮助
答案 1 :(得分:0)
我知道它可以与以下webpack.config.js
一起使用:
const path = require("path");
const webpack = require('webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const WebPackIgnorePlugin =
{
checkResource: function(resource)
{
const lazyImports =
[
'@nestjs/microservices',
'@nestjs/microservices/microservices-module',
'cache-manager',
'class-transformer',
'class-validator',
'fastify-static',
];
if (!lazyImports.includes(resource))
return false;
try
{
require.resolve(resource);
}
catch (err)
{
return true;
}
return false;
}
};
module.exports =
{
mode: 'production',
target: 'node',
entry:
{
server: './src/main.ts',
},
devtool: 'source-map',
module:
{
rules:
[
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/,
},
],
},
resolve:
{
extensions: [ '.tsx', '.ts', '.js' ],
},
node: {
__dirname: false,
},
plugins:
[
new CleanWebpackPlugin(),
new webpack.IgnorePlugin(WebPackIgnorePlugin),
],
optimization:
{
minimize: false
},
performance:
{
maxEntrypointSize: 1000000000,
maxAssetSize: 1000000000
},
output:
{
filename: '[name].js',
path: path.resolve(__dirname, 'prod'),
},
};
IgnorePlugin
是您需要注意的部分。 Nest对某些模块使用延迟加载,而webpack无法分辨出哪个模块。 checkResource()
对那些试图捆绑代码时可能会产生错误的模块进行必要的检查。
您还需要在配置中放置target: node
选项,以便Webpack知道fs
和net
之类的某些模块在Node中是本机支持的(当目标服务器不是这种情况时)是浏览器)。