Пакет UMD библиотеки компонентов Webpack 5 React с исходными картами

#javascript #node.js #reactjs #webpack #umd

Вопрос:

Я пытаюсь выполнить процесс сборки webpack 5 для создания библиотеки компонентов react, у меня только что была пара вещей, которые, похоже, не могут работать.

#1) в webpack построить команду отлично работает, и при использовании инлайн-источник-карта вариант, я могу видеть URL-адресов, чтобы поместить его в файл build воспроизводится, но когда я когда-либо я пытаюсь опубликовать и проверить эту библиотеку на НПМ я всегда получаю запутанный ошибки без оригинальной строки кода, так что я даже не могу сказать где ошибки; что еще я упускаю, чтобы активировать источник-карты? Я использую инструменты разработки Chrome, и он даже не сообщает мне, что для этого кода доступна исходная карта…

#2) Еще одна проблема, с которой я сталкиваюсь, — это после сборки этого с помощью webpack в папку dist; Я запускаю другое приложение для тестирования CRA и пытаюсь извлечь компоненты из встроенной библиотеки, но все, что я получаю, — это эти ошибки.

 ./src/dist/index.js
  Line 1:1:    Expected an assignment or function call and instead saw an expression  no-unused-expressions
  Line 1:112:  'define' is not defined                                                no-undef
  Line 1:123:  'define' is not defined                                                no-undef
  Line 1:190:  Unexpected use of 'self'                                               no-restricted-globals
  Line 1:466:  Expected an assignment or function call and instead saw an expression  no-unused-expressions
  Line 1:631:  Expected an assignment or function call and instead saw an expression  no-unused-expressions
 

Я знаю, что webpack 5 перестал связывать полифиллы для узла, но не должен ли этот код запускаться
, если я помещу его в каталог src приложения CRA? Это код в комплекте, разве он не должен работать в браузере/ в другом приложении React? Я нацелился на UMD, поэтому подумал, что это сработает в этой среде

вот вся необходимая информация

Webpack.config.js

     const path = require("path");
    const { CleanWebpackPlugin } = require("clean-webpack-plugin");
    const nodeExternals = require("webpack-node-externals");
    module.exports = {
      entry: "./src/index.js",
      devtool: "inline-source-map",
      externals: [nodeExternals()],
      output: {
        filename: "index.js",
        path: path.resolve(__dirname, "dist"),
        library: {
          name: "test",
          type: "umd",
        },
      },
      plugins: [new CleanWebpackPlugin()],
      module: {
        rules: [
          {
            test: /.(js|jsx)$/,
            exclude: /node_modules/,
            use: {
              loader: "babel-loader",
              options: {
                presets: ["@babel/preset-env", "@babel/preset-react"],
              },
            },
          },

          {
            test: /.scss$/,
            use: ["style-loader", "css-loader", "sass-loader"],
            include: path.resolve(__dirname, "./src"),
          },
        ],
      },
    };
 

Package.json

     {
      "name": "test-lib",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "start-storybook",
        "build": "webpack --mode production"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "prop-types": "^15.7.2",
        "react": "^17.0.2",
        "react-dom": "^17.0.2"
      },
      "devDependencies": {
        "@babel/core": "^7.15.8",
        "@babel/preset-env": "^7.15.8",
        "@babel/preset-react": "^7.14.5",
        "@storybook/addon-knobs": "^6.3.1",
        "@storybook/react": "^6.3.10",
        "babel-loader": "^8.2.2",
        "clean-webpack-plugin": "^4.0.0",
        "node-sass": "^6.0.1",
        "path": "^0.12.7",
        "sass-loader": "^12.1.0",
        "webpack": "^5.58.0",
        "webpack-cli": "^4.9.0",
        "webpack-node-externals": "^3.0.0"
      }
    }
 

Button.js (образец компонента)

 import React from 'react'
import PropTypes from 'prop-types';
const Button = ({message = 'Hello world'}) => (
   <button>{message}</button>
)

Button.propTypes = {
    message: PropTypes.string.isRequired
}
export default Button
 

Построить точку входа (index.js)

 export { default as Button } from "./components/Button";
 

Комментарии:

1. Есть какие-нибудь новости по этому поводу и смогли ли вы заставить его работать? В настоящее время я объединяю свою библиотеку компонентов с помощью накопительного пакета, что делает ее относительно простой, и там есть множество похожих вопросов и решений… однако теперь я склонен перейти к Webpack 5 и посмотреть, смогу ли я достичь того же результата и случайно уменьшить размер своего пакета.