当前位置: 首页 > 面试题库 >

Webpack输出为空对象

曹建华
2023-03-14
问题内容

我想构建一个React组件库作为节点模块,然后将其导入到不同的项目中。但是,如果我尝试导入组件,它只会返回一个空对象。

button.jsx:

import React, {Component} from 'react'

export class Button extends Component {

   render() {
       return <button className='btn'>Hello Button comp</button>
   }
}

export default Button

index.js

var Button = require('./button/button').default;

module.exports  = {
   Button: Button
}

webpack.config.js

const Path = require('path');

module.exports = {
   resolve: {
      extensions: ['.js', '.jsx']
   },
   entry: {
      app: './src/components/index.js'
   },
   output: {
      path: __dirname,
      filename: 'bundle.js'
   },
   module: {
    rules: [
        {
            test: /\.jsx$/,
            loader: 'babel-loader',
            query: {
                presets: [
                    'es2015',
                    'react'
                ]
            },
            exclude: /node_modules/,
            include: [
                Path.resolve(__dirname, 'src')
            ]
        },
        {
            test: /\.js$/,
            loader: 'babel-loader',
            query: {
                presets: [
                    'es2015',
                    'react'
                ]
            },
            exclude: /node_modules/,
            include: [
                Path.resolve(__dirname, 'src')
            ]
        }
    ]
  }
}

package.json中的主要属性是bundle.js

我发现当我在项目中导入Button时,它只是一个空对象。在我看来,似乎webpack没有正确捆绑索引文件。有什么想法在这里可能出什么问题吗?


问题答案:

默认情况下,webpack捆绑包不会公开您的导出内容,因为它假定您是在构建应用程序而不是库(这是webpack的更常见用法)。您可以通过配置output.library和创建库output.libraryTarget

output: {
   path: __dirname,
   filename: 'bundle.js',
   library: 'yourLibName',
   libraryTarget: 'commonjs2'
},

output.libraryTarget是模块的格式,这也将允许您将库公开为全局变量。commonjs2是Node使用的模块格式。请参阅什么是commonjs2?commonjs和之间的区别commonjs2

由于您使用的是React,因此可以期望该库的使用者将React作为依赖项存在,因此您不希望将其包含在包中。为此,您可以将其定义为External。创作库中对此进行了显示,它为您提供了一个小例子。



 类似资料:
  • 这个用例是一个服务,它将一系列未压缩的。wav媒体片段手动编码为。m4S片段,以便通过MPEG-DASH进行广播,使用ffmpeg将。wav压缩到。aac,使用Sannies/mp4Parser将aac音频组装成。m4S媒体片段。 我创建了这个公共GitHub项目来完整地再现这个问题。 例如,以下是自定义ChunkFragmentM4SBuilder.java类。 null 注意,但是,这种方法对

  • 我试图在Jaspersoft Studio 5.5中创建子报告。我的表格结构如下: 部门(DEPTNO,DNAME,LOC) EMP(EMPNO,ENAME,SAL,DEPTNO) 主报表名称:MainReport.jrxml 子报表名称: 子报表 我已经试过了。 > 通过传递DeptNo参数,在“主报表”中创建了一行。 现在,将子报表组件从组件面板拖到主报表上。 从“子报表”向导中选择了“创建新

  • 我正在尝试使用file writer写入文件,但值为空: 这是错误按摩: 我希望我说的很清楚,我已经尽力了。。请帮帮我。

  • 我不知道这个代码出了什么问题,我得到的标准输出是空的错误帮助我! 提供的投入:

  • 问题内容: 这让我感到很奇怪,我花了一段时间检查代码中的错误之后才发现这一点。 “将副本从数据库表或视图复制到文件。如果指定现有文件,则该文件将被覆盖。提取数据时,请注意bcp实用程序将空字符串表示为null,并将空字符串表示为空字符串。 ” (来自http://msdn.microsoft.com/en- us/library/ms162802.aspx ) 显然,这可以解决我的问题,但是有人可

  • 主要内容:1 Fastjson默认的空值处理,2 Fastjson空值处理的方法,3 忽略空值的示例,4 不忽略空值的示例1 Fastjson默认的空值处理 在Fastjson中,默认情况下是不输出空值(NULL)的。无论Map中的NULL和对象属性中的NULL,序列化的时候都会被忽略不输出,这样会减少产生文本的大小。但如果需要输出空值怎么做呢? 2 Fastjson空值处理的方法 如果你需要输出空值,需要设置SerializerFeature常量值来控制NULL值的输出,下面列出不同情况的空值