【问题标题】:How to tell webpack to ignore node modules, both core and installed from npm?如何告诉 webpack 忽略节点模块,包括核心模块和从 npm 安装的模块?
【发布时间】:2018-07-23 21:46:51
【问题描述】:

我需要打包一个我用 webpack 编写的模块并用 babel 进行转译。但是我不想从node_modules 打包任何东西。此外,不应打包 Node.js 核心模块。

核心模块出现以下错误:

ERROR in ./node_modules/tunnel-agent/index.js
Module not found: Error: Can't resolve 'net' in '...project path...\node_modules\tunnel-agent'
 @ ./node_modules/tunnel-agent/index.js 3:10-24
 @ ./node_modules/request/lib/tunnel.js
 @ ./node_modules/request/request.js
 @ ./node_modules/request/index.js

很明显,webpack 正在爬取节点模块,这是我不想要的。它还明显地尝试加载像 net 和 fs 这样的模块。

如何阻止这种情况,只打包和转译我自己的代码?

我的配置:

const path = require('path');
module.exports = {
    entry: './serverless_function.js',
    output: {
        path: path.resolve('dist'),
        filename: 'serverless_packed.js'
    },
    module: {
        loaders: [
            { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ },
            { test: /\.jsx$/, loader: 'babel-loader', exclude: /node_modules/ }
        ]
    }
}

我需要打包我的无服务器功能以与在 Amazon AWS 上运行的 Node.js 6 兼容。它看起来像这样:

const Library = require("./MyLibrary");
const fs = require("fs");

async function serverlessFunction(event, context, callback) {
    const response = {
        statusCode: 200,
        headers: {

            "Content-Type": "image/png",
            "Content-Disposition": "inline; filename=\"something.png\""
        },
        body: await Library.createImage().asBase64String("param1", "param2"),
        isBase64Encoded: true
    };
    return callback(null, response);
}

module.exports = { serverlessFunction };

【问题讨论】:

    标签: node.js amazon-web-services npm webpack babeljs


    【解决方案1】:

    您可以使用模块webpack-node-externals 来做到这一点:

    const path = require('path');
    const nodeExternals = require('webpack-node-externals');
    
    module.exports = {
        entry: './serverless_function.js',
        output: {
            path: path.resolve('dist'),
            filename: 'serverless_packed.js'
        },
    
        // in order to ignore built-in modules like path, fs, 
        target: 'node',
    
        // in order to ignore all modules in node_modules folder 
        externals: [nodeExternals()],
    
        module: {
            loaders: [
                { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ },
                { test: /\.jsx$/, loader: 'babel-loader', exclude: /node_modules/ }
            ]
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2022-01-03
      • 1970-01-01
      • 2014-06-15
      • 2021-02-09
      • 2017-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      相关资源
      最近更新 更多