项目背景
一个简单的网站,纯粹练手用的!
项目技术栈
nodejs + express + ejs + mysql2 + sequlize(orm) + vscode + babel
这是我的package.json
"dependencies": {
"@babel/polyfill": "^7.4.4",
"ejs": "^2.6.1",
"express": "^4.17.1",
"mysql2": "^1.6.5",
"sequelize": "^5.8.8"
},
"devDependencies": {
"@babel/cli": "^7.4.4",
"@babel/core": "^7.4.5",
"@babel/node": "^7.4.5",
"@babel/plugin-proposal-class-properties": "^7.4.4",
"@babel/preset-env": "^7.4.5" //问题就出在这里,这个“预设”包含很多“插件”
}
问题追踪
class User extends Sequelize.Model {}
User.init({ ... },{ ... });
User.sync().then(()=>{
User.create({
name: '...',
password: '...',
email: "...",
phoneNumber: "..."
});
});
上面User.create就报错了,错误如下:
TypeError: Class constructor Model cannot be invoked without 'new'
......省略了
我跟踪了一下,发现是babel在转换类的过程中出现了问题,于是想着如何禁止babel转换ES6的类,最后在node_modules中找到了转换ES6的插件"@babel/plugin-transform-classes"(插入一下,这个插件是我在安装预设"@babel/preset-env"的时候安装的),接下去就在.babelrc中禁用这个插件,.babelrc的配置如下:
{
"plugins": [["@babel/plugin-proposal-class-properties",{"loose" : true}]],
"presets": [["@babel/preset-env", {"exclude" : ["@babel/plugin-transform-classes"]}]]
}
好了,设置好之后,就不会进行ES6类的装换了,接下去可以愉快的玩了!
补充一下,这个可能不是唯一方法,网上有人说可以退回到2015这个预设,我没有去尝试,因为2015已成过去,我们用babel的其中一个目的就是为了能过使用ES的最新语法,带来编程的快感并且与未来接轨!
网友评论