jackieli123723 / jackieli123723.github.io

✅lilidong 个人博客
9 stars 0 forks source link

SyntaxError: Unexpected token import 报错解决方法 #51

Open jackieli123723 opened 6 years ago

jackieli123723 commented 6 years ago

方法1

babel-core/register 解决 import xx from xx

import Koa from 'koa';
^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:74:10)
    at Object.runInThisContext (vm.js:116:10)
    at Module._compile (module.js:533:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Function.Module.runMain (module.js:605:10)
    at startup (bootstrap_node.js:158:16)
    at bootstrap_node.js:575:3

启用下面的可以解决

传入参数

require("babel-core/register")({
  "presets": [
    ["env", {
      "targets": {
        "node": true
      }
    }]
  ]
});
require("./app.js");

或者

require('babel-core/register')({
  'presets': [
    'stage-3',
    ["latest-node", { "target": "current" }]
  ]
})
require('./app')

简洁版本

require('babel-core/register');
require('./app.js');

依赖

//.babelrc
// {
//   "presets": ["es2015", "stage-2"],
//   "plugins": ["transform-runtime"],
//   "comments": false
// }

// save-dev 
// "babel-plugin-transform-decorators": "^6.24.1",
// "babel-plugin-transform-runtime": "^6.23.0",
// "babel-preset-env": "^1.6.1",
// "babel-preset-es2015": "^6.24.1",
// "babel-preset-stage-2": "^6.24.1",
// "babel-register": "^6.26.0",

注意

require('babel-core/register') 可以用 node --harmony_async_await 代替 从7.6.0开始 已经支持aysnc 和 await

方法2

import  express  from 'express'
const app = express();

app.get('/', function (req, res) {
  res.send('Hello World!111');
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
//这里可以用import
//.babelrc
// // {
//   "presets": ["env"]
// }
//
// "babel-cli": "^6.26.0",
// "babel-preset-env": "^1.7.0"
// "scripts": {
//   "start": "nodemon --exec babel-node index.js"
// },

用nodemon 热开发 import index

预置-ENV npm install --save-dev babel-cli babel-preset-env

如果没有任何配置选项,babel-preset-env的行为与babel-preset-latest(或babel-preset-es2015,babel-preset-es2016和babel-preset-es2017)完全相同。

   "babel-cli": "^6.24.1",
    "babel-preset-latest": "^6.24.1",
{
    "presets": [
        "latest"
    ]
}

方法3 es6 import

#!/usr/bin/env node
require( "babel-register" )( {
    ignore: false,
    only: /src/
} );
require( "./src/index.js" );

#!/usr/bin/env node --harmony
import spawn from "cross-spawn";
import os from "os";

  "babel-preset-es2015": "^6.18.0",
    "babel-preset-stage-0": "^6.16.0",
    "babel-register": "^6.18.0",

    .babelrc
{
  "presets": [ "es2015", "stage-0" ]
}
jackieli123723 commented 4 years ago

var cmd=require('node-cmd');
cmd.run('npm start');

使用pm2 start blog.js即可正常访问

next
// var cmd=require('node-cmd');
// cmd.run('npm start');

//or 
var exec = require('child_process').exec;
exec('npm run start', {windowsHide: true});
jackieli123723 commented 4 years ago

ts-node ??

vs

  "dependencies": {
    "babel-polyfill": "^6.16.0",
    "cors": "^2.8.1"
  },
  "devDependencies": {
    "babel": "^6.5.2",
    "babel-cli": "^6.18.0",
    "babel-loader": "^6.2.7",
    "babel-preset-es2015": "^6.18.0",
    "express": "^4.14.0"
  },
  "scripts": {
    "start": "babel-node server.js"
  },