【问题标题】:Webpack How to use the Target AttributeWebpack 如何使用 Target 属性
【发布时间】:2019-07-22 16:48:49
【问题描述】:

我是 Webpack 的新手,我正试图弄清楚目标的实际作用。

在文档中,Webpack 说:

Node:编译以在类似 Node.js 的环境中使用(使用 Node.js 需要加载块)

Web:编译以在类似浏览器的环境中使用(默认)

但它非常抽象,并没有说明实际的区别是什么。

我注意到如果在节点模式下使用 webpack-server 运行 webpack 配置文件, 我收到错误required is not defined,而 如果我只是使用 webpack 导出文件然后独立运行文件,它运行良好。目标是否仅适用于 webpack 开发服务器?

module.exports = {
  mode: "development",
  target: "web", //node
  devtool: "cheap-module-source-map",
  entry: "./src/index",
  output: {
    path: path.resolve(__dirname, "build"),
    publicPath: "/",
    filename: "./bundle.js"
  },
  devServer: {
    stats: "minimal",
    overlay: true,
    historyApiFallback: true,
    disableHostCheck: true,
    headers: { "Access-Control-Allow-Origin": "*" },
    https: false
  },
}

我将目标属性设置为“web”并从后端运行它。与目标“节点”没有区别。它运行得很好。我看不出该属性的用途

【问题讨论】:

    标签: node.js webpack


    【解决方案1】:

    一个非常简单的例子是,

    假设您正在创建一个React 应用程序,它是一个客户端应用程序,将在浏览器中运行。您将目标设置为web。 (这是默认的)

    假设它是一个后端应用程序,比如一个快递应用程序,它不会在浏览器上运行,而是从node 本身启动。因此,您将目标设置为node。哪个使用 Node.js require 加载块,而不涉及任何内置模块,如 fspath

    请参阅here 了解更多选项。还有compare-webpack-target-bundles 一个很好的资源,用于测试和查看不同的 webpack 目标。也非常适合报告错误。

    【讨论】:

    • 我将目标属性设置为“web”并从后端运行它。与目标“节点”没有区别。无论属性值如何,从 webpack 导出的文件都是相同的。
    • 是的,当您使用 fs 模块和没有浏览器对应的模块时会很明显。有些模块不适用于浏览器,您会在那里看到差异。 __dirname__filename 也会有所不同。
    猜你喜欢
    • 2014-09-01
    • 2018-03-05
    • 1970-01-01
    • 2022-12-03
    • 2017-12-08
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多