【发布时间】:2018-03-26 19:23:18
【问题描述】:
抱歉,可能是一个菜鸟问题,但我一直在阅读很多文章,试图让它发挥作用,但我没有成功。
我喜欢以 express 方式构建我的应用程序,并希望开始将 React 用于我的一些可重用组件。
我希望能够使用 JSX 来获得更简洁的语法,并且一直在尝试让 Babel 在我的基本 Express 应用程序上工作。任何帮助将不胜感激!
使用 express CLI 后,我有一个基本的 express 应用程序:
express example_app --pug
我还安装了以下依赖项:
npm install --save-dev babel-cli babel-preset-es2015 babel-preset-react babel-preset-env react react-dom
然后我将我的预设添加到 .babelrc
{
"presets": ["es2015", "env", "react"]
}
我的 package.json 看起来像这样:
{
"name": "sample-app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "babel-node app.js --presets es2015,env,react",
"devstart": "nodemon ./bin/www"
},
"dependencies": {
"async": "^2.6.0",
"babel-preset-env": "^1.6.1",
"body-parser": "~1.18.2",
"compression": "^1.7.2",
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.15.5",
"express-jsx": "0.0.4",
"express-validator": "^5.0.3",
"hbs": "~4.0.1",
"helmet": "^3.12.0",
"moment": "^2.21.0",
"mongoose": "^5.0.11",
"morgan": "~1.9.0",
"pug": "^2.0.2",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"serve-favicon": "~2.4.5"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"nodemon": "^1.17.2",
"rimraf": "^2.6.2"
}
}
这是我的 Express app.js 文件:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
});
module.exports = app;
这是我认为的 index.pug 布局:
doctype html
html
head
title= title
script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js')
script(type = "module" src='javascripts/script.js')
link(rel='stylesheet', href='/stylesheets/style.css')
body
div#root Hello, React is not working
最后是我的 script.js 文件,其中包含我从 React 教程“将 React 添加到现有应用程序”中的 React 组件:
import React from 'react';
import ReactDOM from 'react-dom';
$( document ).ready(function() {
ReactDOM.render(
<h1>Hello, React is now working</h1>,
document.getElementById('root')
);
});
但是,每次我通过“npm start”启动我的应用程序时,我总是在控制台中收到“Uncaught SyntaxError: Unexpected token
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
(不相关,但是 jQuery 1?!)你是如何编译你的 JSX 的?
-
(我刚刚复制了最快的 jQuery CDN 脚本标签,我发现它只是一个旧版本哈哈)我的印象是 Babel 已经为我编译了 JSX。我不确定。我该怎么做呢?
-
我可能会做一个 React 教程。仅仅在你的 node_modules 文件夹中有 Babel 是不够的。
-
你可能需要使用 webpack webpack.js.org
标签: javascript reactjs express babeljs