如何制作一个可以在 React Application 中使用的 webpack 库?

Posted

技术标签:

【中文标题】如何制作一个可以在 React Application 中使用的 webpack 库?【英文标题】:How to make a webpack library that can be consumed in React Application? 【发布时间】:2017-08-11 10:09:16 【问题描述】:

如何创建可以在 ReactJS 中使用的 webpack 库 ES6。喜欢

-----lib.js-----
export function sum(a , b) 
    return a + b;
;

export function multiply(a, b) 
    return a * b;
;

我想使用以下导入语句来消费:-

import lib from './lib';
console.log(lib.sum(3,5));

我正在使用以下作为 webpack.config.babel.js

export default () => (
    
        entry: './src/lib.js',
        output: 
            path: './dist',
            filename: 'lib.js',
            libraryTarget: 'umd',
            library: 'lib'
        ,
        module: 
            rules: [
                test: /\.js$/, exclude: /node_modules/, loader: "babel-loader"
            ]
        ,
    
);

.babelrc 文件包含以下配置


    "presets": ["es2015"]

package.json 内容


  "name": "lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/lib.js",
  "scripts": 
    "build:lib": "webpack"
  ,
  "author": "",
  "license": "ISC",
  "devDependencies": 
    "babel-core": "^6.24.0",
    "babel-loader": "^6.4.1",
    "babel-preset-es2015": "^6.24.0",
    "babel-preset-es2015-webpack": "^6.4.3",
    "webpack": "^2.2.1"
  

【问题讨论】:

粘贴 package.json 的库,如果您的库代码与使用它的 react 组件位于单独的包中。 【参考方案1】:

除了你要导入的方式外,一切都正确,用这个来导入这个文件中定义的所有函数:

import * as lib from './lib';

现在你可以使用lib.sum(1,2);的任何功能

原因:您要导出许多函数,因此您需要单独导入每个函数或使用 * 来全部导入。

替代方式:

使用module.exports导出很多方法,lib.js文件:

module.exports = 
    sum: function(a,b)
       return a + b; 
    ,

    multiply: function(a,b)
       return a * b; 
    

通过以下方式导入此文件:

import Lib from "lib";

现在lib.sum(1,2);使用它

参考:https://danmartensen.svbtle.com/build-better-apps-with-es6-modules

【讨论】:

它不适合我。我添加了有问题的 webpack 配置文件。【参考方案2】:

一些事情突然出现:

如果你导出所有东西,你也应该导入所有东西:

import * as lib from './lib';

(如@MayankShukla 删除的答案所述)

output.pathmust be absolute:

output: 
    path: path.resolve(__dirname, 'dist'),
    // ...

【讨论】:

拥有 10k 声誉的好处,您可以看到已删除的答案 :) 对 @MayankShukla,将 " 已删除答案" 更改为 "a 已删除答案" i> :)

以上是关于如何制作一个可以在 React Application 中使用的 webpack 库?的主要内容,如果未能解决你的问题,请参考以下文章

如何制作需要特定导入的混合包 React/React-Native

如何制作react组件包上传到npm

使用 React Hooks,我如何制作一个可重用的组件和父组件相互利用?

React Native:如何使用 expo 在 webview 中制作全屏 youtube 嵌入视频(没有 react-native 链接)

在后台从 React 组件制作 HTML 字符串,如何在另一个 React 组件中通过危险的SetInnerHTML 使用该字符串

React:如何制作可访问的菜单?