nodejs-excute-es6CMD

Node环境直接执行命令

起因

  • 开发环境 nodejs + webpack + babel 作Serv端
  • 语法是ES6
  • 用$nmp run 执行测试一切正常
  • 写了一个代码生成的小工具放在Tool下面,用来直接生成XXXDao.js

问题

  • 代码生成工具用直接Node genFiles.js 无法执行。说不认识ES6语法(用了import)

  • 参考package.json 的Server脚本,估计执行babel-node 应该可以

    1
    "server": "babel-node ./src/bin/www",
  • 但直接用babel-node 说找不到命令

    1
    2
    'babel-node' は、内部コマンドまたは外部コマンド、
    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

解决

经过一番谷GE,知道 package.json的scripts是自动改变环境变量的

1.每当执行npm run,就会自动新建一个 Shell,在这个 Shell 里面执行指定的scripts脚本命令。因此,只要是 Shell(一般是 Bash)可以运行的命令,就可以写在 npm 脚本里面。
2.比较特别的是,npm run新建的这个 Shell,执行scripts的时候,会将当前目录的node_modules/.bin子目录加入PATH变量,执行结束后,再将PATH变量恢复原样。
3.这意味着,当前目录的node_modules/.bin子目录里面的所有脚本,在scripts中都可以直接用脚本名,而不必加上路径。比如,当前项目的依赖里面有 Mocha,只要直接写mocha test就可以了。
“test”: “./node_modules/.bin/mocha test”
//可以简写为
“test”: “mocha test”
由于 npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。

如果要在命令行里直接执行命令,就要指定路径。本地安装的包都在【node_modules.bin】下有链接

所以下面的命令就可以执行了

1
node_modules\.bin\babel-node .\tool\codeGen\XXXXX.js