私はフロントエンドにかなり慣れていません-Reactにクライアント側を実装しようとしています。 「react-native」依存関係を追加してwebpack
を実行すると、次のエラーが発生します。
ERROR in ./node_modules/react-native/index.js 13:7
Module parse failed: Unexpected token (13:7)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
| 'use strict';
|
> import typeof AccessibilityInfo from './Libraries/Components/AccessibilityInfo/AccessibilityInfo';
| import typeof ActivityIndicator from './Libraries/Components/ActivityIndicator/ActivityIndicator';
| import typeof Button from './Libraries/Components/Button';
@ ./node_modules/@react-navigation/native/lib/module/useBackButton.js 2:0-43 5:25-36
@ ./node_modules/@react-navigation/native/lib/module/index.js
@ ./src/main/js/app.js
私はpackage.jsonに次の依存関係があります:
"dependencies": {
"@react-native-community/masked-view": "^0.1.7",
"@react-navigation/native": "^5.1.4",
"@react-navigation/stack": "^5.2.9",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-native": "^0.62.1",
"react-native-gesture-handler": "^1.6.1",
"react-native-reanimated": "^1.7.1",
"react-native-safe-area-context": "^0.7.3",
"react-native-screens": "^2.4.0",
"rest": "^2.0.0"
},
"scripts": {
"watch": "webpack --watch -d"
},
"devDependencies": {
"@babel/core": "^7.9.0",
"@babel/preset-env": "^7.9.0",
"@babel/preset-react": "^7.9.4",
"babel-loader": "^8.1.0",
"webpack": "^4.42.1",
"webpack-cli": "^3.3.11"
}
「typeof」演算子が認識されないと思いますが、なぜですか?
私はこの正確な問題に対処するために数時間費やしました。
まず、_ "@babel/preset-flow"
を.babelrc
ファイルに追加してみてください(インストール後)。 こちら が推奨されましたが、実際には機能しませんでした。
私にとってうまくいったのは、externals: { "react-native": true },
をwebpack.config.js
ファイルに追加するだけでした。私の設定ファイルは次のようになりました:
const path = require("path")
module.exports = {
entry: "./src/index.js",
output: {
filename: "main.js",
path: path.resolve(__dirname, "dist"),
},
externals: {
"react-native": true,
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: ["babel-loader"],
},
// ...
],
},
}
私の理解では、react-native
は依存関係であるため、 @babel/preset-flow
は実際にはトリガーされず、これらのファイルのflow
のフォーマットを解釈するのに役立ちませんでした。 "entry"
ファイルのメインのwebpack.config.js
場所にあるファイルを処理します。
うまくいけば、これが誰かを助けるでしょう。私が少しベースを外れている場合は、この回答について自由にコメントしてください。更新します:)
ブラウザでReact Nativeを実行しますか?実行する場合は、 React Native for Web を使用することをお勧めします。
react-native
はブラウザで実行できません。 react-native
のreact-native-web
からwebpack.config.js
へのエイリアスを追加する必要があるため、このパッケージが代わりに使用されます。
React Native for Web documentation に従って、webpack構成にこの変更を加える必要があります。
// webpack.config.js
module.exports = {
// ...the rest of your config
resolve: {
alias: {
'react-native$': 'react-native-web'
}
}
}