【问题标题】:webpack umd lib and external fileswebpack umd lib 和外部文件
【发布时间】:2015-12-13 14:57:57
【问题描述】:

我想将我的 react 组件打包为 umd 库。

下面是 webpack 我的设置:

module.exports = {
  devtool: 'eval',
  entry: [
    './lib/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'lib.js',
    library: 'lib',
    libraryTarget: 'umd'
  },
  resolve: {
    extensions: ['', '.js']
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        loaders: ['babel'],
        exclude: /node_modules/
      }
    ]
  },
  externals: {
    "react": "React"
  }
}

然后在我以这种方式在我的其他组件中需要包之后

example.js

import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import {lib} from "../dist/lib";

以上组件的 webpack 设置为:

module.exports = {
  devtool: 'eval',
  entry: [
    './examples/example'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  resolve: {
    extensions: ['', '.js']
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        loaders: ['babel'],
        exclude: /node_modules/
      }
    ]
  }
}

我编译example.js文件后,显示错误:

Line 3: Did you mean "react"?
  1 | (function webpackUniversalModuleDefinition(root, factory) {
  2 |   if(typeof exports === 'object' && typeof module === 'object')
> 3 |       module.exports = factory(require("React"));
    |                                    ^
  4 |   else if(typeof define === 'function' && define.amd)
  5 |       define(["React"], factory);
  6 |   else if(typeof exports === 'object')

我认为错误来自外部设置,因为在我删除 externals: {react: "React"} 后,它可以工作。

我搜索了一些相关的答案,但无法解决。

有人知道吗?谢谢。

【问题讨论】:

    标签: reactjs webpack


    【解决方案1】:

    我找到了答案!

    原因是umd需要设置不同的外部值(参考doc)。

    因为我将外部反应设置为{react: React},所以webpack会尝试找到一个名为React的包。

    所以你需要在不同的模块定义中设置不同的值。

    externals: {
      "react": {
        root: 'React',
        commonjs2: 'react',
        commonjs: 'react',
        amd: 'react'
      }
    }
    

    那就修好了!

    【讨论】:

    • 感谢您发布此信息!今天让我省了很多麻烦
    • 你使用的是哪个版本的 webpack?它仍然适用于 webpack 2 吗?
    • @BigDong 我还没有尝试过 webpack 2。它不适用于 webpack 2 吗?
    • 感谢您发布此信息。我用 webpack 4 试过了,它可以工作
    • 非常感谢!谢谢你,兄弟!我正在搜索 3 天,因为 webpack 文档只是胡扯,我没有看到任何帮助!
    猜你喜欢
    • 2017-01-01
    • 1970-01-01
    • 2014-04-27
    • 2016-06-25
    • 2015-12-07
    • 2020-10-28
    • 2017-08-30
    • 2017-06-20
    • 2017-10-28
    相关资源
    最近更新 更多