四:babel配置
為了兼容低版本的node不原生支持async/await的問題。這里babel我使用了babel-preset-env{"modules": false}的配置。此配置會將es6語法轉為es5語法,例如let、const轉為var。
同時將所有的async/await函數也轉成了polyfill里定義的_asyncToGenerator函數。
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
其實是使用promise實現了async函數的功能。
當然這個函數在運行時還需要regeneratorRuntime函數。所以我在全局引入了babel-polyfill來提供regeneratorRuntime函。
注:如果你的node版本很高且原生支持async/await,大可將babel-preset-env和babel-polyfill省略掉
代碼:
const path = require('path'); const webpack = require('webpack'); const _externals = require('externals-dependencies') module.exports = { entry: { app: [ // 如果polyfill放在這里,打包的時候將不會被external,必須在js里require才能有效external // 'babel-polyfill', './src/index.js' ] }, output: { path: path.resolve(__dirname), filename: '[name].js' }, resolve: { extensions: [".js"] }, target: 'node', externals: _externals(), context: __dirname, node: { console: true, global: true, process: true, Buffer: true, __filename: true, __dirname: true, setImmediate: true, path: true }, module: { rules: [ { test: /\.js/, use: ['babel-loader'] } ] }, plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: '"development"' } }), ] }
部署
經過打包,部署的時候就方便多了,只需要將package.json、app.js、以及view里的html部署上線就好了。然后在服務器上執行
1. npm install
2. npm run for
然后server就后臺運行了。如果需要更新發布,只需要本地重新npm run dev或npm run build打好包,拖到服務器覆蓋app.js即可。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com