Webpack正在编译不需要的模块

我有一个与webpack编译的Node.js应用程序。 编译我的应用程序并运行后,我得到以下错误:

Error: Cannot find module 'oracledb' at Function.Module._resolveFilename (module.js:469:15) at Function.Module._load (module.js:417:25) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at t.(anonymous function).i (C:\Users\xxx\Documents\xxx\web-test-nodejs\dist\api\bundled.js:1:400) at Object.<anonymous> (C:\Users\xxx\Documents\xxx\web-test-nodejs\dist\api\bundled.js:1:1982) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Module.require (module.js:497:17) at require (internal/module.js:20:19) at Object.<anonymous> (C:\Users\xxx\Documents\xxx\web-test-nodejs\index.js:19:14) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) 

我没有利用oracledb,并明确排除它在我的webpackconfiguration文件(下面包括)。 我用knex使用mysql,我相信knex是这个错误的原因。 我怎样才能摆脱这个错误?

 module.exports = [{ entry: [ './src/api/index.js', ], module: { rules: [{ test: /\.js$/, exclude: externalNodeModules, }, { test: /\.js$/, exclude: externalNodeModules, loader: 'eslint-loader', enforce: 'pre', }, { test: /\.js$/, exclude: externalNodeModules, loader: 'babel-loader', options: { presets: ['env'], }, }, { test: /\.(html)$/, use: { loader: 'html-loader', options: { attrs: [':data-src'], }, }, }, ], }, node: { __dirname: true, }, target: 'node', externals: { 'sqlite3': 'sqlite3', 'mariasql': 'mariasql', 'mssql': 'mssql', 'mysql2': 'mysql2', 'oracle': 'oracle', 'strong-oracle': 'strong-oracle', 'oracledb': 'oracledb', 'pg': 'pg', 'pg-query-stream': 'pg-query-stream', }, output: { path: path.join(__dirname, 'dist', 'api'), filename: 'bundled.js', libraryTarget: 'umd', }, resolve: { modules: [ 'node_modules', 'src/node_modules', 'src', ], }, plugins: [ new webpack.LoaderOptionsPlugin({ minimize: true, debug: false, }), new webpack.optimize.UglifyJsPlugin({ beautify: false, mangle: { screw_ie8: true, keep_fnames: true, }, compress: { screw_ie8: true, }, comments: false, }), ], }, { entry: { 'index': './src/entry/app.js', '404': './src/entry/404.js', }, module: { rules: [{ test: /\.js$/, exclude: [ externalNodeModules, path.resolve(__dirname, 'src/static/js/third_party'), ], loader: 'eslint-loader', enforce: 'pre', }, { test: /\.js$/, exclude: externalNodeModules, loader: 'babel-loader', options: { presets: ['env'], }, }, { test: /\.css$/, exclude: externalNodeModules, use: extractCSS.extract({ fallback: 'style-loader', use: 'css-loader', }), }, { test: /\.(eot|svg|ttf|woff|woff2)$/, exclude: externalNodeModules, loader: 'url-loader?limit=30000&name=font/[name].[ext]', }, { test: /\.(png|jpg|gif|ico)$/, exclude: externalNodeModules, loader: 'file-loader?name=img/[name].[ext]', }, ], }, output: { publicPath: '/', path: path.join(__dirname, 'dist', 'web', 'static'), filename: 'js/[name].js', }, plugins: [ new webpack.LoaderOptionsPlugin({ minimize: true, debug: false, }), new webpack.optimize.UglifyJsPlugin({ beautify: false, mangle: { screw_ie8: true, keep_fnames: true, }, compress: { screw_ie8: true, }, comments: false, }), new CleanWebpackPlugin(['dist']), extractCSS, new webpack.ProvidePlugin({ '$': 'jquery', 'jquery': 'jquery', 'jQuery': 'jquery', 'window.$': 'jquery', 'window.jquery': 'jquery', 'window.jQuery': 'jquery', }), new CopyWebpackPlugin([{ from: 'views/**/*.pug', context: 'src/', to: '..', }, { from: 'img/profile/**/*.{jpg,gif,png}', context: 'src/static/', }, ]), ], }]; 

编辑

运行node index.js时构build应用程序之后会引发此错误

看起来你需要在安装knex之后在这里安装一个模块:

http://knexjs.org/#Installation-node

所以第一:

 npm install knex --save 

然后:

 npm install mysql --save 

我期望安装mysql将阻止它寻找oracledb

还要确保你指定你的客户端为mysql:

 var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' } }); 

在你的webpackconfiguration中删除对Oracledb的引用。