Node.js 如何将表达和反应结合起来?
当我使用webpack with webpack dev server运行react项目时,twitter npm模块出现错误 错误是:Node.js 如何将表达和反应结合起来?,node.js,reactjs,webpack,webpack-dev-server,Node.js,Reactjs,Webpack,Webpack Dev Server,当我使用webpack with webpack dev server运行react项目时,twitter npm模块出现错误 错误是: *ERROR in ./~/twitter/~/request/~/har-validator/lib/schemas/timings.json Module parse failed: /Users/peterkaminski/react-test/node_modules/twitter/node_modules/request/node_modules/
*ERROR in ./~/twitter/~/request/~/har-validator/lib/schemas/timings.json
Module parse failed: /Users/peterkaminski/react-test/node_modules/twitter/node_modules/request/node_modules/har-validator/lib/schemas/timings.json Unexpected token (2:12)*
我只有在需要推特的时候才能得到它。我当前的项目设置使用webpack和babel
我尝试过的一个解决方案是,在我使用React呈现所有前端时,只需设置一个express服务器来处理所有API调用。我已经试着找到了一些关于如何将express与React结合起来的教程,但都不是很清楚
设置项目的最佳方法是什么,这样您就可以包含各种节点模块而不会出现此类错误,您如何使用Express运行React?似乎您的加载程序(包括节点模块)和您正在使用的库有一个JSON文件,而由于缺少JSON加载程序,Web包无法绑定该文件 使用npm Install json loader安装json loader,并将您的网页配置为处理json文件 顺便说一下,如果不需要捆绑,您应该排除节点_模块 它
似乎您的加载程序(包括节点_模块)和您正在使用的库有一个JSON文件,由于缺少JSON加载程序,Web包无法绑定该文件 使用npm Install json loader安装json loader,并将您的网页配置为处理json文件 顺便说一下,如果不需要捆绑,您应该排除节点_模块 它
下面是一个示例设置,允许您开始开发(包括npm包和网页包)
{
"name": "mvp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon server/server.js",
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack --watch"
},
"author": "",
"license": "ISC",
"dependencies": {
"angular": "^1.6.4",
"axios": "^0.16.2",
"babel-core": "^6.25.0",
"babel-loader": "^7.0.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"body-parser": "^1.17.2",
"bootstrap": "^4.0.0-alpha.6",
"cors": "^2.8.3",
"dotenv": "^4.0.0",
"express": "^4.15.3",
"lodash": "^4.17.4",
"morgan": "^1.8.2",
"pg": "^6.2.4",
"react": "^15.6.0",
"react-bootstrap": "^0.31.0",
"react-dom": "^15.6.0",
"react-transition-group": "^1.2.0",
"reactstrap": "^4.6.2",
"sequelize": "^4.0.0",
"webpack": "^2.6.1"
},
"devDependencies": {
"nodemon": "^1.11.0"
}
}
//this is a code
const path = require('path');
const SRC_DIR = path.resolve(__dirname, 'react-client/src');
const BUILD_DIR = path.resolve(__dirname, 'react-client');
module.exports = {
entry: path.resolve(SRC_DIR, 'index.js'),
output: {
filename: 'bundle.js',
path: BUILD_DIR
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: [/node_modules/],
use: [{
loader: 'babel-loader',
options: { presets: ['es2015', 'react'] }
}],
}
]
}
}
const express = require('express');
const bodyParser = require('body-parser');
const morgan = require('morgan')
const port = 8000
const db = require('../database/config.js')
const todoListRouter = require('./router/todoList.router')
const cors = require('cors')
const app = express()
app.use(express.static('react-client'))
.use(bodyParser.json())
.use(bodyParser.urlencoded({extended:true}))
.use(morgan('dev'))
.use('/api', todoListRouter)
app.all('*', function(req, res, next){
res.header("Access-Control-Allow-Origin", "x")
res.header("Access-Control-Allow-Headers","X-Request-With");
next();
})
app.listen(port, 'localhost', ()=>{
console.log("server running on port :" + port);
})
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import axios from 'axios'
import NavBar from '../src/components/navbar'
import ToDo from '../src/components/todo'
import ToDoBuilder from '../src/components/todobuilder'
import ToDoList from '../src/components/todolist'
import ToDosWithSameUser from '../src/components/todowithsameuser'
....//your component here
ReactDOM.render(<App />, document.getElementById('app'));
import React,{Component}来自“React”
从“react dom”导入react dom
从“axios”导入axios
从“../src/components/NavBar”导入导航栏
从“../src/components/ToDo”导入ToDo
从“../src/components/ToDoBuilder”导入ToDoBuilder
从“../src/components/ToDoList”导入ToDoList
从“../src/components/todowithsameuser”导入ToDosWithSameUser
....//此处显示您的组件
ReactDOM.render(,document.getElementById('app'));
npm运行网页包这里是一个示例设置,允许您开始开发(包括npm包和网页包)
{
"name": "mvp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "nodemon server/server.js",
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack --watch"
},
"author": "",
"license": "ISC",
"dependencies": {
"angular": "^1.6.4",
"axios": "^0.16.2",
"babel-core": "^6.25.0",
"babel-loader": "^7.0.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"body-parser": "^1.17.2",
"bootstrap": "^4.0.0-alpha.6",
"cors": "^2.8.3",
"dotenv": "^4.0.0",
"express": "^4.15.3",
"lodash": "^4.17.4",
"morgan": "^1.8.2",
"pg": "^6.2.4",
"react": "^15.6.0",
"react-bootstrap": "^0.31.0",
"react-dom": "^15.6.0",
"react-transition-group": "^1.2.0",
"reactstrap": "^4.6.2",
"sequelize": "^4.0.0",
"webpack": "^2.6.1"
},
"devDependencies": {
"nodemon": "^1.11.0"
}
}
//this is a code
const path = require('path');
const SRC_DIR = path.resolve(__dirname, 'react-client/src');
const BUILD_DIR = path.resolve(__dirname, 'react-client');
module.exports = {
entry: path.resolve(SRC_DIR, 'index.js'),
output: {
filename: 'bundle.js',
path: BUILD_DIR
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: [/node_modules/],
use: [{
loader: 'babel-loader',
options: { presets: ['es2015', 'react'] }
}],
}
]
}
}
const express = require('express');
const bodyParser = require('body-parser');
const morgan = require('morgan')
const port = 8000
const db = require('../database/config.js')
const todoListRouter = require('./router/todoList.router')
const cors = require('cors')
const app = express()
app.use(express.static('react-client'))
.use(bodyParser.json())
.use(bodyParser.urlencoded({extended:true}))
.use(morgan('dev'))
.use('/api', todoListRouter)
app.all('*', function(req, res, next){
res.header("Access-Control-Allow-Origin", "x")
res.header("Access-Control-Allow-Headers","X-Request-With");
next();
})
app.listen(port, 'localhost', ()=>{
console.log("server running on port :" + port);
})
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import axios from 'axios'
import NavBar from '../src/components/navbar'
import ToDo from '../src/components/todo'
import ToDoBuilder from '../src/components/todobuilder'
import ToDoList from '../src/components/todolist'
import ToDosWithSameUser from '../src/components/todowithsameuser'
....//your component here
ReactDOM.render(<App />, document.getElementById('app'));
import React,{Component}来自“React”
从“react dom”导入react dom
从“axios”导入axios
从“../src/components/NavBar”导入导航栏
从“../src/components/ToDo”导入ToDo
从“../src/components/ToDoBuilder”导入ToDoBuilder
从“../src/components/ToDoList”导入ToDoList
从“../src/components/todowithsameuser”导入ToDosWithSameUser
....//此处显示您的组件
ReactDOM.render(,document.getElementById('app'));
npm run webpack听起来好像您没有将
排除节点单元模块
从您的webpack加载程序配置中。您可能会混淆一些术语-express是一个http服务器,它响应http谓词,这几乎是它唯一的任务,而React是一个在浏览器中运行的面向用户的UI库。这些“协同工作”的唯一时间是,如果您正在进行服务器端页面呈现,那么用户在实际启动React之前已经看到了“静态页面”,并将其替换为真正的交互式UI。这并不是说你没有问题,但你可能想重新表述一下。听起来你没有从你的网页加载器配置中排除节点模块。你可能混淆了一些术语-express是一个http服务器,它响应http动词,这几乎是它唯一的工作,而React是在浏览器中运行的面向用户的UI库。这些“协同工作”的唯一时间是,如果您正在进行服务器端页面呈现,那么用户在实际启动React之前已经看到了“静态页面”,并将其替换为真正的交互式UI。这并不是说您没有问题,但您可能需要重新表述一下。我将尝试此操作并返回给您我现在收到这些错误:找不到模块:错误:无法在中解析模块“fs”。。。找不到模块:错误:无法解析模块“net”。。。在./~/twitter/~/request/~/forever agent/index.js模块中找不到错误:错误:无法解析/Users/peterkaminski/react test/node_modules/twitter/node_modules/request/node_modules/forever agent@./~/twitter/~/request/~/forever agent/index.js 7:10-24^在npm安装后保存json加载程序并使我的加载程序如下所示:加载器:[{test:/\.js$/,exclude:/node\u modules/,loader:“babel loader”},{test:/\.json$/,loader:“json loader”}]我还应该指出,我尝试了{test:/\.json$/,exclude:/node\u modules/,loader:“json loader”},但这也不起作用。现在是注释。您最初关于解析json的错误已经消失,这是另外一个问题,所以请更新您的问题,以便其他人也可以了解正在发生的事情以及如何帮助您。这是正确的方法{test://\.json$/,exclude:/node\u modules/,loader:“json loader”}我将尝试此方法并返回给您我现在收到这些错误:未找到模块:错误:无法解析中的模块“fs”。。。找不到模块:错误:无法解析模块“net”。。。在./~/twitter/~/request/~/forever agent/index.js模块中找不到错误:错误:无法解析/Users/peterkaminski/react test/n中的模块“tls”