реагировать-родной-веб, как настроить веб-пакет - PullRequest
0 голосов
/ 17 февраля 2020

Я хотел упаковать собственный проект реакции и использовать его непосредственно на веб-стороне, но продолжал сообщать об ошибках во время сборки и запуска , Я также хочу упаковать node_module。 Вот мои настройки

{
  "name": "testDemo",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "test": "jest",
    "lint": "eslint .",
    "build": "webpack --config webpack.config.js",
    "deploy": "npm run build &&  node server.js",
    "web": "node node_modules/webpack-dev-server/bin/webpack-dev-server -w",
    "dev": "webpack-dev-server --config webpack.config.dev.js",
  },
  "dependencies": {
    "@ant-design/react-native": "^3.2.2",
    "@babel/preset-env": "^7.8.4",
    "@react-native-community/cli-platform-android": "^4.0.2",
    "antd-mobile-demo-data": "^0.3.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-preset-env": "^1.7.0",
    "babel-preset-es2016": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-react-native": "4.0.0",
    "china-city-data": "^1.0.1",
    "clean-webpack-plugin": "^0.1.19",
    "es3ify-webpack-plugin": "^0.1.0",
    "json-loader": "^0.5.7",
    "prop-types": "^15.7.2",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-native": "0.61.5",
    "react-native-modal-dropdown": "^0.7.0",
    "react-native-modal-layer": "^1.0.4",
    "react-native-picker": "^4.3.7",
    "react-native-router-flux": "^4.2.0",
    "react-native-web": "^0.12.1",
    "react-native-webpack": "^0.1.1",
    "rn-wheel-picker-china-region": "^1.0.3",
    "webpack-node-externals": "^1.7.2",
    "webpack-visualizer-plugin": "^0.1.11"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/runtime": "7.8.4",
    "@react-native-community/eslint-config": "0.0.5",
    "@types/node": "^13.7.1",
    "@types/webpack": "^4.41.6",
    "autoprefixer": "^9.7.4",
    "babel": "^6.23.0",
    "babel-core": "^6.26.3",
    "babel-jest": "24.9.0",
    "babel-loader": "^6.4.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-latest": "^6.24.1",
    "babel-runtime": "^6.26.0",
    "copy-webpack-plugin": "^5.1.1",
    "css-loader": "^0.28.11",
    "ejs-loader": "^0.3.5",
    "eslint": "^6.8.0",
    "eslint-loader": "^3.0.3",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^5.0.2",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.2.0",
    "jest": "24.9.0",
    "loader": "^2.1.1",
    "metro-react-native-babel-preset": "0.56.4",
    "postcss-loader": "^3.0.0",
    "react-native-webpack-server": "^0.9.3",
    "react-test-renderer": "16.9.0",
    "style-loader": "^1.1.3",
    "ts-node": "^8.6.2",
    "typescript": "^3.7.5",
    "url-loader": "^3.0.0",
    "webpack": "^3.12.0",
    "webpack-cli": "^4.0.0-beta.3",
    "webpack-dev-server": "2.6.1",
    "webpack-stats-plugin": "^0.3.1"
  },
  "jest": {
    "preset": "react-native"
  }
}

const path = require('path');
const webpack = require('webpack')
const htmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const nodeExternals = require('webpack-node-externals');
const StatsPlugin = require('webpack-stats-plugin')
const VisualizerPlugin = require('webpack-visualizer-plugin')

module.exports = {
    devtool: 'inline-source-map',
    entry: {
        bundle: path.join(__dirname, 'index.web'),
    },
    output: {
        path: path.resolve(__dirname, 'dist/dc/testDemo/'),
        publicPath: "/", 
        filename: 'bundle.js',
    },
  /*  target: 'node', // in order to ignore built-in modules like path, fs, etc.
    externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
   */ module: {
        rules:[
            /*{
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },*/
            { test: /\.(js|jsx)?$/, loader: 'babel-loader', include:path.resolve(__dirname, 'src')},
           /* {
                test: /\.(js|jsx)$/,exclude: [
                    path.resolve(__dirname, 'node_modules'),
                ],
            },*/
            {
                
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: [
                        {
                            loader: "css-loader",
                            options: {
                                //       modules: true,
                                //       localIdentName: "[local]_[hash:base64:5]"
                            }
                        },
                        "postcss-loader",
                        "less-loader"
                    ]
                }),
                exclude: path.resolve(__dirname, "src")
            },
            {
                test: /\.(css|less)$/,
                include: /node_modules/,
                use: [{
                    loader: 'style-loader' // creates style nodes from JS strings
                }, {
                    loader: 'css-loader', // translates CSS into CommonJS
                }, {
                    loader: 'less-loader', // compiles Less to CSS
                    options: { javascriptEnabled: true, sourceMap: true },
                }],
            },
            {
                test: /\.(css|less)$/,
                exclude: /node_modules/,
                use: [{
                    loader: 'style-loader' // creates style nodes from JS strings
                }, {
                    loader: 'css-loader', // translates CSS into CommonJS
                    options: {
                        modules: true,
                        localIdentName: '[path][name]__[local]--[hash:base64:5]',
                    }
                }],
            },
            {
                
                test: /\.less$/,
                use: [
                    "style-loader",
                    "css-loader",
                    "postcss-loader",
                    `less-loader`
                ],
                include: path.resolve(__dirname, "node_modules","@ant-design")
            },
            {
                test: /\.s?[ac]ss$/,
                use: ExtractTextPlugin.extract({
                    fallback: 'style-loader',
                    use: [
                        {
                            loader: 'css-loader',
                            options: {
                                minimize: true
                            }
                        },
                        {
                            loader: 'sass-loader',
                            options: {
                                includePaths: [path.resolve(__dirname, './src')]
                            }
                        }
                    ]
                })
            },
            {
               
                test: /\.(eot|woff|svg|ttf|woff2|appcache|mp3|mp4|pdf)(\?|$)/,
                include: path.resolve(__dirname, "src"),
                use: [
                    "file-loader?name=assets/[name].[hash].[ext]"
                ]
            },
            {
               
                test: /\.(png|jpg|gif)$/,
                include: path.resolve(__dirname, "src"),
                use: [
                    "url-loader?limit=8192&name=assets/[name].[hash].[ext]",
                ]
            },
            {
               
                test: /\.(csv|tsv)$/,
                use: [
                    'csv-loader'
                ]
            },
            {
               
                test: /\.xml$/,
                use: [
                    'xml-loader'
                ]
            },
            {
                test: /\.(js|jsx)$/,
                include: [path.resolve(__dirname, './src')],
                loader: 'babel-loader',
                query: {
                    plugins: [],
                },
            },
        ]
    },
    resolve: {
        extensions: ['.js','.jsx'],
        /*modules: [__dirname, 'node_modules'],*/
        alias: { 'react-native$': 'react-native-web',
            'react-native-router-flux': path.resolve(__dirname, "node_modules/react-native-router-flux")},
        /*alias: {
            'react-native': path.join(__dirname, 'node_modules/react-native'),
            react: path.join(__dirname, 'node_modules/react'),
        }*/
    },
    plugins: [
        /*["module-resolver", {
            "alias": {
                "^react-native$": "react-native-web"
            }
        }],*/
         new StatsPlugin.StatsWriterPlugin({
             fields: null,
             filename: __dirname + ".stats.json"
         }),
         new VisualizerPlugin({
             filename: __dirname + ".stats.html"
         }),
         new webpack.optimize.CommonsChunkPlugin({
             name: [ '.hello-world.bundle', 'vendor.bundle' ]
         }),
        new htmlWebpackPlugin({
            filename: 'index.html',
            inject: 'body',
            template: './index.html',
            title: 'index title test',
            minify: {                  
                removeComments: true,     
                collapseWhitespace: true 
            }
        }),


    ]
};

Я новичок и использовал компоненты многих других людей, поэтому буду сообщать об ошибках при запуске и упаковке. Как я могу решить эту проблему? Спасибо

D:\Tools\nvm\v13.8.0\node.exe D:\Tools\nvm\v13.8.0\node_modules\npm\bin\npm-cli.js run dev --scripts-prepend-node-path=auto

> testDemo@0.0.1 dev F:\project\testDemo
> webpack-dev-server --config webpack.config.dev.js

Project is running at http://localhost:8080/
webpack output is served from /
(node:3572) DeprecationWarning: loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
webpack-visualizer-plugin: error writing stats file
webpack-visualizer-plugin: error writing stats file
Hash: f0590768fbff9e41d941
Version: webpack 3.12.0
Time: 7664ms
                                           Asset       Size  Chunks                    Chunk Names
assets/u789.d179a97b30f355298dc7b0a1f89ec531.png     110 kB          [emitted]         
 assets/u83.92db372e6664f83fa936b5974691aaf2.png    8.65 kB          [emitted]         
assets/u889.61df1a3e2ce147ed045ea10b32b4abc6.png    8.78 kB          [emitted]         
                                       bundle.js     8.5 MB       0  [emitted]  [big]  bundle
                  F:\project\testDemo.stats.json    10.4 MB          [emitted]  [big]  
                                      index.html  576 bytes          [emitted]         
   [0] ./node_modules/react/index.js 190 bytes {0} [built]
   [1] ./node_modules/react-native-web/dist/index.js 4.41 kB {0} [built]
 [167] ./src/BroadbandBusiness.js 24.7 kB {0} [built]
 [195] ./src/app.json 61 bytes {0} [built]
 [196] multi (webpack)-dev-server/client?http://localhost:8080 ./index.web 40 bytes {0} [built]
 [197] (webpack)-dev-server/client?http://localhost:8080 5.83 kB {0} [built]
 [198] ./node_modules/url/url.js 23.3 kB {0} [built]
 [204] (webpack)-dev-server/node_modules/strip-ansi/index.js 161 bytes {0} [built]
 [206] ./node_modules/loglevel/lib/loglevel.js 8.61 kB {0} [built]
 [207] (webpack)-dev-server/client/socket.js 856 bytes {0} [built]
 [239] (webpack)-dev-server/client/overlay.js 3.6 kB {0} [built]
 [244] (webpack)/hot nonrecursive ^\.\/log$ 170 bytes {0} [built]
 [246] (webpack)/hot/emitter.js 77 bytes {0} [built]
 [248] ./index.web.js 407 bytes {0} [built]
 [608] ./index.js 238 bytes {0} [built]
    + 594 hidden modules

WARNING in ./node_modules/@ant-design/react-native/es/segmented-control/segmented.ios.js
39:47-66 "export 'SegmentedControlIOS' was not found in 'react-native'
 @ ./node_modules/@ant-design/react-native/es/segmented-control/segmented.ios.js
 @ ./node_modules/@ant-design/react-native/es/segmented-control/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

WARNING in ./node_modules/@ant-design/react-native/es/slider/index.js
40:44-50 "export 'Slider' was not found in 'react-native'
 @ ./node_modules/@ant-design/react-native/es/slider/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

WARNING in ./node_modules/@ant-design/react-native/es/image-picker/CameraRollPicker.js
84:39-49 "export 'CameraRoll' was not found in 'react-native'
 @ ./node_modules/@ant-design/react-native/es/image-picker/CameraRollPicker.js
 @ ./node_modules/@ant-design/react-native/es/image-picker/ImageRoll.js
 @ ./node_modules/@ant-design/react-native/es/image-picker/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

WARNING in ./node_modules/@ant-design/react-native/es/action-sheet/index.js
9:12-26 "export 'ActionSheetIOS' was not found in 'react-native'
 @ ./node_modules/@ant-design/react-native/es/action-sheet/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/@react-native-community/viewpager/js/index.js
Module not found: Error: Can't resolve './ViewPagerAndroid' in 'F:\project\testDemo\node_modules\@react-native-community\viewpager\js'
 @ ./node_modules/@react-native-community/viewpager/js/index.js 3:17-46
 @ ./node_modules/@ant-design/react-native/es/tabs/Tabs.js
 @ ./node_modules/@ant-design/react-native/es/tabs/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-collapsible/Accordion.js
Module parse failed: Unexpected token (11:19)
You may need an appropriate loader to handle this file type.
| 
| export default class Accordion extends Component {
|   static propTypes = {
|     sections: PropTypes.array.isRequired,
|     renderHeader: PropTypes.func.isRequired,
 @ ./node_modules/@ant-design/react-native/es/accordion/index.js 16:0-61
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-modal-layer/lib/ModalLayerFactory.js
Module parse failed: Unexpected token (15:16)
You may need an appropriate loader to handle this file type.
|             options = {
|                 component: (props) => React.createElement(elem, props),
|                 ...elem.modalLayerOptions
|             };
|         else
 @ ./node_modules/react-native-modal-layer/lib/index.js 3:0-52
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/@bang88/react-native-ultimate-listview/src/refreshableScrollView.ios.js
Module parse failed: Unexpected token (18:22)
You may need an appropriate loader to handle this file type.
| 
| export default class RefreshableScrollView extends ScrollView {
|   static defaultProps = {
|     horizontal: false,
|     scrollEnabled: true,
 @ ./node_modules/@bang88/react-native-ultimate-listview/src/refreshableScrollView.js 4:0-45
 @ ./node_modules/@bang88/react-native-ultimate-listview/index.js
 @ ./node_modules/@ant-design/react-native/es/list-view/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-modal-popover/lib/Popover.js
Module parse failed: Unexpected token (228:16)
You may need an appropriate loader to handle this file type.
|         var computedStyles = this.computeStyles();
|         var contentSizeAvailable = this.state.contentSize.width;
|         return (<react_native_1.Modal transparent visible={visible} onRequestClose={onClose} onDismiss={onDismiss} supportedOrientations={supportedOrientations} onOrientationChange={this.onOrientationChange}>
|         <react_native_1.View style={[styles.container, !!contentSizeAvailable && styles.containerVisible]}>
| 
 @ ./node_modules/react-native-modal-popover/lib/index.js 3:16-36 5:16-36
 @ ./node_modules/@ant-design/react-native/es/popover/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/@bang88/react-native-ultimate-listview/src/ultimateListView.js
Module parse failed: Unexpected token (24:22)
You may need an appropriate loader to handle this file type.
| 
| export default class UltimateListView extends Component {
|   static defaultProps = {
|     initialNumToRender: 10,
|     horizontal: false,
 @ ./node_modules/@bang88/react-native-ultimate-listview/index.js 1:0-53
 @ ./node_modules/@ant-design/react-native/es/list-view/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/@bang88/react-native-ultimate-listview/src/refreshableScrollView.android.js
Module parse failed: Unexpected token (29:22)
You may need an appropriate loader to handle this file type.
| 
| export default class RefreshableScrollView extends ScrollView {
|   static defaultProps = {
|     horizontal: false,
|     scrollEnabled: true,
 @ ./node_modules/@bang88/react-native-ultimate-listview/src/refreshableScrollView.js 3:0-53
 @ ./node_modules/@bang88/react-native-ultimate-listview/index.js
 @ ./node_modules/@ant-design/react-native/es/list-view/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-modal-layer/lib/ModalLayers.js
Module parse failed: Unexpected token (37:16)
You may need an appropriate loader to handle this file type.
|     }
|     render() {
|         return (<View style={{ flex: 1 }}>
|         {this.props.children}
|         <View pointerEvents={'box-none'} style={{
 @ ./node_modules/react-native-modal-layer/lib/index.js 1:0-40
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-modal-layer/lib/ModalLayerController.js
Module parse failed: Unexpected token (55:25)
You may need an appropriate loader to handle this file type.
|     }
|     setOptions(options) {
|         this.options = { ...this.options, ...options };
|     }
|     hide() {
 @ ./node_modules/react-native-modal-layer/lib/index.js 2:0-58
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-modal-popover/lib/PopoverTouchable.js
Module parse failed: Unexpected token (69:16)
You may need an appropriate loader to handle this file type.
|             throw new Error('Popover touchable must have two children and the second one must be Popover');
|         }
|         return (<React.Fragment>
|         {React.cloneElement(children[0], {
|             ref: this.setRef,
 @ ./node_modules/react-native-modal-popover/lib/index.js 9:25-54
 @ ./node_modules/@ant-design/react-native/es/popover/index.js
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in ./node_modules/react-native-safe-area-view/index.js
Module parse failed: Unexpected token (99:28)
You may need an appropriate loader to handle this file type.
| 
| class SafeView extends Component {
|   static setStatusBarHeight = height => {
|     _customStatusBarHeight = height;
|   };
 @ ./node_modules/@ant-design/react-native/es/tab-bar/index.js 7:0-55
 @ ./node_modules/@ant-design/react-native/es/index.js
 @ ./src/BroadbandBusiness.js
 @ ./index.web.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./index.web

ERROR in chunk vendor.bundle [entry]
bundle.js
Conflict: Multiple assets emit to the same filename bundle.js
Child html-webpack-plugin for "index.html":
     1 asset
       [0] ./node_modules/html-webpack-plugin/lib/loader.js!./index.html 727 bytes {0} [built]
       [1] ./node_modules/lodash/lodash.js 541 kB {0} [built]
       [2] (webpack)/buildin/global.js 509 bytes {0} [built]
       [3] (webpack)/buildin/module.js 517 bytes {0} [built]
webpack: Failed to compile.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...