Nuxt项目支持import写法的三种解决方案

一、前情摘要
使用npx create-nuxt-app创建Nuxt.js项目,项目默认使用require引入依赖,如下:

const Koa = require('koa')

而此时我们想使用ES6的 import 语法:

import Koa from 'koa'

运行的时候,会报 SyntaxError: Unexpected identifier,即不识别import错误。
这是因为使用 npx create-nuxt-app 创建出来的Nuxt.js项目在 npm run dev 时直接使用node编译index.js,我们之前写的项目之所以可以,是因为有用babel去处理,也就是说,要想node本身支持 import 语法,那我们就要安装 babel 去处理。

二、解决方案

1、使用 babel-preset-es2015

前提:已安装babel-cli,还没安装可通过 npm install -g babel-cli 安装

(1)修改package.json,下图中红框部分,结合babel处理:
(2)项目根目录创建babel配置文件 .babelrc 并配置:

{
  "presets": [
    "es2015"
  ]
}

(3)安装 babel-preset-es2015

npm install babel-preset-es2015

最后重新运行 npm run dev,问题解决。
但目前官方已经不推荐使用 babel-preset-es2015,在你安装过程中,它会建议你使用 babel-preset-env 代替。

2、使用 babel-preset-env
步骤与方案1一样,不同之处是把安装babel-preset-es2015 改为 babel-preset-env,再对应修改 .babelrc 文件即可:

{
  "presets": [
    "env"
  ]
}

3、使用 @babel/cli、@babel/core、@babel/preset-env、@babel/node

想知道你已经安装了哪些包,直接看 package.json 文件。

这里提一下 @babel/cli 与 babel-cli 的区别:
@babel/cli 是7.0以后的版本的命名方式,bable-cli 是之前的,如下图所示:
在这里插入图片描述
如果使用的是 7.0 以后的版本,则安装包都是以 @babel 开头的。
在babel 7.x 以前,babel-node通过安装bable-cli包即可。
但在Babel 7.x 以后,babel 的模块被被拆分。因此需要单独安装 @babel/node。

安装完后,修改package.json文件:

“scripts”: {
“dev”: "cross-env NODE_ENV=development nodemon server/index.js --watch server --exec babel-node --presets @babel/env",
“build”: “nuxt build”,
“start”: "cross-env NODE_ENV=production nodemon server/index.js --exec babel-node --presets @babel/env",
“generate”: “nuxt generate”,
“lint”: “eslint --ext .js,.vue --ignore-path .gitignore .”,
“test”: “jest”
}

最后运行 npm run dev,问题即可解决,此时因为 package.json 文件中运行指令已经有了 --presets @babel/env,所以并不需要再配置.babelrc 文件。

当然,你也可以在.babelrc 中写入:

{
  "presets": ["@babel/env"]
}

而将 package.json 文件运行指令中的 --presets @babel/env 删除,效果是一样的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值