【发布时间】:2018-11-03 03:48:22
【问题描述】:
期望的行为
我希望能够:
- 使用
webpack定义一个使用babel将ES6 服务器端Node 文件转换为"plain javascript"的构建过程
当前行为
如果我只是跑步:
node app.js
我收到导入错误:
从“快递”进口快递; ^^^^^^^
语法错误:意外的标识符
我的尝试
当我尝试在 webpack 中定义构建过程时,我收到如下错误:
无法解决
tls/net/fs/dns/child_process/aws-sdk/./local_settings/npm/node-gyp
here 提供了一个可能的解决方案,但它不能解决所有错误(这些错误仍然存在:aws-sdk、./local_settings、npm、node-gyp):
target: "node"
还有类似的警告:
模块解析失败:意外令牌
关键依赖:依赖的请求是一个表达式
这个“我如何在生产中使用 ES6?”问题似乎很常见,例如:
NodeJS in ES6/ES7, how do you do it in production?
Quickstart guide to using ES6 with Babel, Node and IntelliJ
Getting ready for production use
Is it okay to use babel-node in production
但我找到的答案都不是确定的或与 webpack 解决方案特别相关。
下面是我现在的代码:
来自webpack.config.js
const path = require('path');
console.log("the __dirname is: " + __dirname);
module.exports = {
entry: "./src/js/app.js",
output: {
filename: "app.js",
path: path.resolve(__dirname, "dist/js")
},
target: "node",
mode: "development",
module: {
rules: [{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["env", "stage-0"]
}
}
},
{
test: /\.css$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" }
]
},
{
test: /\.less$/,
use: [
{ loader: "style-loader" },
{ loader: "css-loader" },
{ loader: "less-loader" }
]
},
{
test: /\.jpg$/,
use: [
{ loader: "url-loader" }
]
}
]
}
}
来自package.json:
...
"main": "app.js",
"scripts": {
"start": "nodemon ./app.js --exec babel-node -e js",
"build": "webpack",
"watch": "webpack --w"
},...
"dependencies": {
"bcrypt": "^2.0.1",
"body-parser": "^1.18.2",
"cors": "^2.8.4",
"express": "^4.16.3",
"jsonwebtoken": "^8.2.1",
"mongodb": "^3.0.8"
},
"devDependencies": {
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"babel-preset-stage-0": "^6.24.1",
"css-loader": "^0.28.11",
"file-loader": "^1.1.11",
"less": "^3.0.4",
"less-loader": "^4.1.0",
"style-loader": "^0.21.0",
"url-loader": "^1.0.1",
"webpack": "^4.8.3",
"webpack-cli": "^2.1.3"
}
问题
我的webpack.config.js 和package.json 文件应该是什么样子才能成功地将ES6 文件转换为"plain javascript"?
【问题讨论】:
-
作为参考,我可以通过在
package.json:"scripts": {"start": "nodemon dist/js/app.js", "build-server-file": "babel src/js/app.js --out-file dist/js/app.js"}中定义使用 webpack 来转换 es6 without。当我运行npm run build-server-file然后npm start时,它似乎“工作”了。
标签: node.js webpack ecmascript-6