一、前情摘要
使用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
去處理。
二、解決方案
前提:已安裝babel-cli,還沒安裝可通過
npm install -g babel-cli
安裝
(1)修改package.json,下圖中紅框部分,結合babel處理:
(2)項目根目錄創建babel配置文件 .babelre
並配置:
{
"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
,再對應修改 .babelre
文件即可:
{
"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
,問題即可解決,此時並不需要配置(可以沒有) .babelrc
文件。