Files
zum-hub/webpack.config.js
2021-11-23 23:07:17 +09:00

72 lines
1.8 KiB
JavaScript

const axios = require('axios');
const cheerio = require('cheerio');
const path = require('path');
const apiMocker = require('connect-api-mocker');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: {
main: './src/index.js',
},
output: {
path: path.resolve('./dist'),
filename: '[name].js',
},
devServer: {
client: {
overlay: {
errors: true,
warnings: false,
},
},
onBeforeSetupMiddleware: (devServer) => {
if (!devServer) {
throw new Error('webpack-dev-server가 정의되지 않았습니다.');
}
devServer.app.get('/api/detail/:url', (req, res) => {
const getHtml = async () => {
const url = `https://hub.zum.com/${req.params.url.replace(
/ /g,
'/'
)}`;
try {
return await axios.get(url);
} catch (error) {
console.error(error);
}
};
getHtml()
.then((html) => {
const $ = cheerio.load(html.data);
const data = {
title: $('div.article_header > div > div > h2').text(),
category: $(
'div.article_header > div > div > p.top > strong'
).html(),
mainContents: $('div.article.d_article').html(),
mediaName: $('#btn_media').text(),
};
return data;
})
.then((result) => res.send(result));
});
devServer.app.use(apiMocker('/api', 'mocks/api'));
},
},
mode: 'development', // 개발 모드
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
plugins: [new HtmlWebpackPlugin({ template: './public/index.html' })],
};