webpack打包的ES6代码,import获取的值为空/undefined

webpack配置如下啦:

const webpack = require('webpack')
const path = require('path')

const config = {
    context: path.resolve(__dirname, '../src'),
    entry: '../src/app.js',
    output: {
        path: path.resolve(__dirname, '../dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [{
            test: /\.js$/,
            include: path.resolve(__dirname, '../src'),
            use: [{
                loader: 'babel-loader',
                options: {
                    presets: ['env']
                }
            }]
        }]
    },
    plugins:[
    ]
}

module.exports = config

使用如上的webpack配置,打包app.js如下:

import a from './a'
import b from './b'
export{
    a,
    b
}

打包完发布npm,另一个项目使用该模块包,import {a} from xxx,却拿不到a或者b的值分别为undefined,这是为啥?(上述打包一切正常,已使用babel转换,依赖引入的也是转换后的es5代码)求指教!

阅读 15.2k
5 个回答

这个问题查了会资料,就自问自答了,以供参考:
首先,webpack,默认打包结构是一个闭包,然后模块是作为闭包的参数列表,是个数组,每一项也是个匿名函数,具体参考链接

暴露出的对象,都在闭包中,应该是导致拿不到值的根本原因(后续还需具体跟踪!)。

解决方案:
参考官方文档:https://webpack.js.org/config...
有一个libraryTarget的属性,作用是定义模块运行的方式,将它的值设为umd,则问题解决!

你的 a.jsb.js 怎么写的?

你这种用法:import a from './a'
对应的a.js 应该有export defaut

如果没有 default,
应该这样用:import {a} from './a'

得看你的 package.json

需要看下你 a b js文件中有没有export defaut.
最好看下你这两个文件

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题