【问题标题】:Trouble when trying to import component in React尝试在 React 中导入组件时出现问题
【发布时间】:2019-01-14 04:17:39
【问题描述】:

我在尝试使用 React 导入组件时遇到问题。

app.js:1 Uncaught ReferenceError: require is not defined 在:5:12 在我 (babel.min.js:24) 在 r (babel.min.js:24) 在 e.src.n.(:3000/匿名函数).l.content (https://unpkg.com/babel-standalone@6.26.0/babel.min.js:24:30503) 在 XMLHttpRequest.n.onreadystatechange (babel.min.js:24)

经过一番研究我发现错误是因为浏览器不理解import所以我尝试安装webpack,它没有工作,所以我做了一些其他研究,最后我不得不禁用windows防火墙,然后我能够运行 npm 安装,我得到了这个:

  • webpack@4.28.4 添加了来自 127 个贡献者的 157 个包,并在 18.717 秒内审核了 36574 个包,发现运行了 31 个高危漏洞 npm audit fix 修复它们,或npm audit 了解详情

但我的项目中没有出现任何内容。

下面是我的所有项目:

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="x-ua-compatible" content="ie=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="app"></div>

    <script src="https://unpkg.com/babel-standalone@6.26.0/babel.min.js"></script>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="./src/components/app.js" type="text/babel"></script>

  </body>
</html>

/src/components/com.js

class Com extends React.Component {
  render() {
    return <div>
      <h1>Hey this is my com component</h1>
    </div>
  }
}

export default Com

/src/components/app.js

import Com from './com.js'

class App extends React.Component {
  render() {
    return <div>
      <h1>Hey this is my app component</h1>
      <p>{Math.random() * 10}</p>
      <Com />
    </div>
  }
}

ReactDOM.render(<App />, document.getElementById('app'))

希望有人能帮我弄清楚。

(我想在我的问题开始时打个招呼,但我不知道为什么我不能编辑它,所以在这里你好。)

编辑

我终于可以使用 webpack 了。

webpack.config.js

const webpack = require("webpack")
const path = require("path")

let config = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "./public"),
    filename: "./bundle.js"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: "babel-loader",
        options: {
          presets: [
            '@babel/preset-env',
            '@babel/preset-react'
          ]
        }
      }
    ]
  }
}

module.exports = config

我不知道是否正确,但我确实有 Babel 工作,我可以正确导入组件。

【问题讨论】:

  • 可以给你webpack配置吗?
  • 或者,如果你不想为此挣扎,我建议 create-react-app
  • 我没有任何 webpack,因为我没有让它工作,而且我之前使用过 creat-react-app 但 cdn 在我的情况下效率更高,所以我想使用他们。
  • 但是但是但是但是....不管你是什么意思更高效。它是一个开发环境,您的“导出”生产代码会将自身编译成一个脚本文件,您将托管在您的服务器上,没有 CDN,没有依赖项,什么都没有。用于生产的单个静态脚本文件。
  • cdn 加载速度比我服务器上的文件快,而且我只需要服务几个 ko,而不是 400ko,所以是的,在我的情况下它更有效。

标签: javascript reactjs


【解决方案1】:

Webpack 构建一个 js bundle 文件,所以需要去掉 html 文件中的 cdn。您可以使用插件将它们添加到 webpack.config 文件中。

npm install webpack-cdn-plugin --save-dev

https://www.npmjs.com/package/webpack-cdn-plugin

- 编辑-

你可以npx create-react-app your-app

或者如果你只是想要 react 和 babel,你可以使用 npm。

确保你有一个 package.json。

npm init

添加反应。

npm install react react-dom --save-dev

https://www.npmjs.com/package/react-dom

添加 babel。

npm install babel-loader @babel/core 
@babel/preset-env @babel/preset-react --save-dev

https://babeljs.io/setup#installation

您可以在 package.json 中找到依赖项。

然后重新配置 webpack.config.js。

module.exports = {
  entry: './src/app.js',
  output: {
     path: path.join(_dirname, 'public'),
     filename: 'bundle.js'
   module: {
     rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
               '@babel/preset-env',
               '@babel/preset-react'
            ]
          }
        }
      }
    ]
  }
};

https://webpack.js.org/configuration/

【讨论】:

  • 我用google搜索了webpack-cdn-plugin,它似乎生成了一个带有cdn的index.html,所以我真的不明白为什么我不能自己做。我需要的是一个 webpack.config.js 来处理 React。
  • 嗯,这里有三个选项。如果你想使用cdn,你有我的第一个答案。如果您想要最简单的方法,我编辑了我的答案并向您展示了如何安装 create-react-app。最终答案将让您使用 webpack 的 react 和 babel,它向您展示了如何使用配置的 webpack.config.js 文件来设置它们。最后一个选项是最令人困惑的,但可以为您的应用提供最大的灵活性和自定义。
  • 我用我的 webpack.config.js 编辑了我的帖子我不知道当我这样做时你是否收到通知
  • 您对代码进行了哪些更改以使其正常工作?您是否摆脱了 Html 文件中的 cdn?你在 Webpack.config.js 文件中添加了什么?
  • 我终于让 webpack 工作了,所以我刚刚创建了我帖子中的 webpack.config.js,就是这样(也删除了 babel cdn,我按照你说的通过 npm 安装了它)
猜你喜欢
  • 2019-12-29
  • 1970-01-01
  • 2021-05-09
  • 2017-05-29
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
相关资源
最近更新 更多