node.js - Webpack 正在编译不需要的模块

标签 node.js 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,并且已在我的 webpack 配置文件(包含在下面)中明确将其排除。我将 mysql 与 knex 一起使用,并且我相信 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时构建应用程序后抛出此错误

最佳答案

看起来你需要在安装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'
  }
});

同时删除 webpack 配置中对 O​​racledb 的引用。

关于node.js - Webpack 正在编译不需要的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46107904/

相关文章:

javascript - 使用 dart 作为 node.js 的转译器

javascript - 连接两个(或更多)字符串并产生相同的字符串,无论顺序如何

javascript - TypeError:Object.setPrototypeOf 调用 null 或未定义

node.js - 如何在 Typescript 中指定我想要的重载函数?

javascript - 防止删除相关模型实例 - Loopback 3

reactjs - 如何导出 Next.js 静态应用程序以在 Chrome 扩展中使用?

javascript - 导出默认不工作 webpack,reactjs

javascript - CleanWebpackPlugin 不允许我重建

node.js - WebPack - 错误找不到 .src 文件夹

node.js - babel-preset-env 无法与 webpack-dev-server v2.2.0-rc.0 一起使用