Пожалуйста, не отмечайте это как дубликат вопросов по Babel 6, потому что это касается конкретно Babel 7!
Я пробую новую бета-версию Babel 7 (@babel/[email protected]
и т. д.), и у меня возникают проблемы с использованием @babel/polyfill
.
Резюме
- Когда я создаю проект с помощью Webpack, все работает нормально.
- Когда я пытаюсь запустить его из командной строки, я получаю SyntaxError.
Я, наверное, просто забыл что-то простое, но я не могу понять, что. Есть идеи, в чем проблема?
Спецификация системы
- macOS High Sierra для разработчиков, бета-версия 5
- Узел 8.9.1
- НПМ 5.5.1
Файлы
.babelrc.js
module.exports = {
presets: [
['@babel/preset-env', { targets: { node: 6 } }],
['@babel/preset-stage-3'],
['@babel/preset-flow']
]
}
источник/index.js
require('@babel/polyfill')
module.exports = require('./main')
источник/main.js
import 'dotenv-safe/config'
Командная строка
$ node --trace-warnings ./src/index.js
Сообщение об ошибке
import 'dotenv-safe/config'
^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:599:28)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/Users/deniz/Code/my-project/src/index.js:3:18)
пакет.json
{
"name": "foobar",
"private": true,
"version": "1.0.0",
"description": "lol",
"main": "./dist/bundle.js",
"module": "./src/main.js",
"scripts": {
"clean": "rimraf dist",
"build": "webpack",
"watch": "webpack -w",
"flow": "flow",
"flow-typed": "flow-typed",
"dev": "node --trace-warnings ./src/index.js",
"start": "node ./dist/bundle.js"
},
"devDependencies": {
"@babel/cli": "^7.0.0-beta.32",
"@babel/core": "^7.0.0-beta.32",
"@babel/preset-env": "^7.0.0-beta.32",
"@babel/preset-flow": "^7.0.0-beta.32",
"@babel/preset-stage-3": "^7.0.0-beta.32",
"babel-eslint": "^8.0.2",
"babel-loader": "^8.0.0-beta.0",
"dotenv-safe": "^4.0.4",
"eslint": "^4.12.0",
"eslint-config-prettier": "^2.9.0",
"eslint-plugin-flowtype": "^2.39.1",
"eslint-plugin-prettier": "^2.3.1",
"flow-bin": "^0.59.0",
"flow-typed": "^2.2.3",
"prettier": "^1.8.2",
"rimraf": "^2.6.2",
"webpack": "^3.9.1"
},
"dependencies": {
"@babel/polyfill": "^7.0.0-beta.32",
"node-schedule": "^1.2.5"
}
}
webpack.config.js
const path = require('path')
module.exports = {
target: 'node',
entry: ['./src/index.js'],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
include: [path.resolve(__dirname, 'src')],
loader: 'babel-loader'
}
]
},
externals: [
{
mariasql: true,
msnodesql: true,
msnodesqlv8: true,
mysql: true,
mysql2: true,
oracle: true,
oracledb: true,
'pg-query-stream': true,
pg: true,
sqlite3: true,
'strong-oracle': true,
tds: true
}
],
devtool: 'source-map'
}
SyntaxError: Unexpected token import
- Nodejs еще не поддерживает импорт, попробуйтеrequire('dotenv-safe/config')
- person DSCH   schedule 01.12.2017require('@babel/polyfill')
в index.js, а затем, когда яrequire('./main.js')
, у меня сложилось впечатление, что я смогу использоватьimport
? - person damd   schedule 01.12.2017import
. Период. Вы должны транспилировать его. Используйте для этой цели один из многих плагинов babel. Также обратите внимание, что, хотя спецификация не требует этого, каждая нативная реализация модулей ATM требует расширения файла.js
, поэтому, если вы не хотите использовать нетранспилированный в браузере, вам нужно его добавить. - person Jared Smith   schedule 01.12.2017