现在前端开发很流行ES6,所以前端转向node开发可以继续保持ES6写法。现在node对ES6语法越来越友好了。下面开始搭建一个支持ES6编写的node项目。同时使用nodemon在项目源码修改时自动重启服务。首先初始化一个项目npminit或者npminit-y,先安装一个express(根据自己的需要选择web服务框架)npminstallexpress--saveinstallbabeltoolnpminstallbabel-cli--save-devnpminstallbabel-plugin-transform-runtime--save-devnpm安装babel-preset-env--save-devnpm安装babel-preset-es2015--save-devnpm安装babel-preset-latest--save-devnpm安装babel-register--save-devInstall@babel/runtimenpminstall@babel/runtime--saveinstallnodemon在修改NODE项目代码的时候,我们需要让项目自动编译更新npminstallnodemon--save-devinstall"rimraf"当项目文件打包完成,需要删除最后打包的文件目录npminstallrimraf--save-devcross-env可以跨平台设置和使用环境变量npminstallcross-env--save我们来配置package.json文件,添加以下代码在脚本中“构建”:“rimrafdist/&&babel./--out-dirdist/--ignore./node_modules,./.babelrc,./package.json,./npm-debug.log--copy-files","start":"cross-envNODE_ENV=developmentnodemon--harmonyindex-api.js"然后新建一个文件.babelrc,将如下代码写入{"presets":["es2015"],"plugins":["transform-runtime"]}至此基本配置已经完成。接下来,创建一个服务器文件app.jsimportexpressfrom'express'constapp=express()app.listen(3000,function(){console.log('服务器启动成功!')})这时候如果使用node命令紧急启动app.js,一个会报错,因为import模块引入commandNode不识别,所以用一个中间页面做transition,新建index.jsrequire('babel-register')({presets:['env']})require('./app.js')此时使用npmstartindex.js启动项目(使用node命令直接启动index.js文件不会报错)下面我会贴我项目中的配置仅供您参考。package.json文件{"name":"node-api","version":"1.0.0","description":"","main":"index.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1","build":"rimrafdist/&&babel./--out-dirdist/--ignore./node_modules,./.babelrc,./package.json,./npm-debug.log--copy-files","start":"cross-envNODE_ENV=developmentnodemon--harmonyindex.js"},"keywords":[],"author":"","license":"ISC","dependencies":{"@babel/runtime":"^7.4.2","cookie-parser":"^1.4.4","cross-env":"^5.2.0","express":"^4.16.4","express-session":"^1.15.6","mysql":"^2.16.0","node-uuid":"^1.4.8"},"devDependencies":{"babel-cli":"^6.26.0","babel-plugin-transform-runtime":"^6.23.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-latest":"^6.24.1","babel-register":"^6.26.0","nodemon":"^1.18.10","rimraf":"^2.6.3"}}.babelrc{"presets":["es2015"],"plugins":["transform-runtime"]}app.jsimportexpressfrom'express'从'./router/index.js'导入路由器从'body-parser'导入bodyParser从'cookie-parser'导入cookieParser从'express-session'导入会话;constapp=express();app.set('端口',process.env.PORT||200);//设置监听端app.all('*',(req,res,next)=>{const{origin,Origin,referer,Referer}=req.headers;constallowOrigin=origin||Origin||referer||Referer||'*';res.header("Access-Control-Allow-Origin",allowOrigin);res.header("Access-Control-Allow-Headers","Content-Type,Authorization,X-Requested-用");res.header("访问-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");res.header("Access-Control-Allow-Credentials",true);//可以取cookiesres.header("X-Powered-By",'Express');if(req.session){console.log('Enter')}if(req.method=='OPTIONS'){res.sendStatus(200);}else{next();}});app.use(express.static('./view'));app.use(bodyParser.json({limit:'1mb'}));//这里指定参数使用json格式app.use(cookieParser());//挂载cookieapp.set('trustproxy',1)app.use(session({secret:'keyboardcat',name:'token',//这里的名字值得一个cookiename,默认cookie名称为:connect.sidrolling:true,cookie:{maxAge:60*60*1000,httpOnly:true},//设置maxAge为80000ms,即session和对应的cookie会在80s后过期。resave:true,saveUninitialized:false}));router(app);app.listen(app.get('port'),()=>{console.log(`服务端口:${app.get('port')}`)})index.jsrequire('babel-register')({presets:['env']})require('./app.js')到此结束,这是我最基础的项目配置
