Node.js Babel、Express和React部署最佳实践

Node.js Babel、Express和React部署最佳实践,node.js,reactjs,express,npm,babeljs,Node.js,Reactjs,Express,Npm,Babeljs,我是babel的新手,只是想知道部署分发代码的最佳实践是什么?下面是我遇到的流程和问题。如果这是最好的方法,欢迎任何建议 在使用express server的“start”:“node./bin/www”启动脚本时,我开始遇到语法错误:无法在模块外部使用import语句。从我的研究中,我发现你不能使用我相信的ES6的Import语法 为了在开发中解决这个问题,我开始使用。我首先安装了dev依赖项 npm install @babel/cli @babel/core @babel/node @ba

我是babel的新手,只是想知道部署分发代码的最佳实践是什么?下面是我遇到的流程和问题。如果这是最好的方法,欢迎任何建议

在使用express server的
“start”:“node./bin/www”
启动脚本时,我开始遇到
语法错误:无法在模块外部使用import语句。从我的研究中,我发现你不能使用我相信的ES6的
Import
语法

为了在开发中解决这个问题,我开始使用。我首先安装了dev依赖项

npm install @babel/cli @babel/core @babel/node @babel/preset-env nodemon --save-dev
然后我开始用
nodemon--exec babel node./bin/www
运行脚本,这解决了
SyntaxError:cannotuse use import语句在模块之外的问题

但是,阅读for babel its时,会发现
babel节点
命令并非用于生产
。我希望能够使用命令
node./bin/www
来运行我的服务器。我发现了这个与babel一起使用服务器代码的示例,并开始实现它

它使用命令
babel[source]-d[destination]
将我的服务器代码转换成兼容的JavaScript。我开始使用这个命令创建npm脚本,开始为分发代码创建我的
dist
文件夹。下面显示了我的
package.json
中用于转换文件的
scripts
部分

"scripts": {
    "build-server": "babel app.js -d dist",
    "build-routes": "babel routes -d dist/routes",
    "build-controllers": "babel controllers -d dist/controllers",
    "build-services": "babel services -d dist/services",
    "build-db": "babel db -d dist/db",
    "build-bin": "npx copyfiles bin/* dist ",
    "build-pk": "npx copyfiles package.json dist && npx copyfiles package-lock.json dist && npx copyfiles views/* dist",
    "build": "npm run build-server && npm run build-routes && npm run build-controllers && npm run build-services && npm run build-db && npm run build-bin && npm run build-pk"
  },
我没有在
build bin
脚本中运行
babel
命令,因为没有
SyntaxError:无法在模块外部使用import语句在这些文件中,此错误来自我的
路由、控制器、数据库、服务
目录和我的
app.js
文件

我的客户端代码位于
client
目录的
root
目录下。要构建客户端代码,我只需使用启动时附带的
“build”:“react scripts build”
。我客户端的分发代码现在位于
client/build/
下。我只是制作了更多的npm脚本,将此代码复制到我的
dist
目录中

"scripts": {
    "start": "node ./bin/www"
  }
最后的
package.json
文件
scripts
部分如下所示

"scripts": {
    "start": "node ./bin/www",
    "start-dis": "node ./dist/bin/www",
    "dev": "nodemon --exec babel-node ./bin/www",
    "build-server": "babel app.js -d dist",
    "build-routes": "babel routes -d dist/routes",
    "build-controllers": "babel controllers -d dist/controllers",
    "build-services": "babel services -d dist/services",
    "build-db": "babel db -d dist/db",
    "build-bin": "npx copyfiles bin/* dist ",
    "build-eb": "npx copyfiles .ebextensions/* dist",
    "build-pk": "npx copyfiles package.json dist && npx copyfiles package-lock.json dist && npx copyfiles views/* dist",
    "build-client":"npx copyfiles client/build/static/css/* dist && npx copyfiles client/build/static/js/* dist && npx copyfiles client/build/* dist",
    "build": "npm run build-server && npm run build-routes && npm run build-controllers && npm run build-services && npm run build-db && npm run build-bin && npm run build-eb && npm run build-pk && npm run build-client"
  }
运行命令
npm run build
将创建以下目录结构(注意
。ebextensions
只是aws elasticbeanstalk的配置文件

这可以工作,当我在
dist
目录下时,我现在可以使用
package.json
文件中的脚本
start
运行我的服务器

"scripts": {
    "start": "node ./bin/www"
  }
只是不确定所有这些是否都是最佳实践,以及是否存在更具可扩展性的解决方案?欢迎提供有关将Babel与React和Express结合使用的任何建议/提示