API를 숨기는 것이 당연하겠지만, 지금까지 두려움 반, 귀찮음 반으로 애써 무시하고 있었다. 결국 이번 기회에 가볍게 배울 수 있었지만, 역시 배우다보니 너무 어렵다. 과제를 하면서 fetch를 axios로 바꾸는 것에 상당히 애를 먹었었는데, 막상 해내고나니 별 것 아니여서 또 억울했다. 그나마 Nuxt JS의 SEO최적화 진입장벽이 생각보다 낮은 것을 위안삼는다..
module: {
rules: [
{
test: /\.s?css$/,
use: [
'vue-style-loader',
'css-loader',
'postcss-loader',
{
loader: 'sass-loader',
options: {
additionalData: `
@use "sass:color";
@use "sass:list";
@use "sass:map";
@use "sass:math";
@use "sass:meta";
@use "sass:selector";
@use "sass:string";
@import "~/scss/_variables";
`
}
}
sass를 사용하는 파일에서 자동으로 use, import
npm i -D netlify-cli
서버없이 설정가능해주는 netlify의 기능
scripts에 "dev:netlify": "netlify dev"
추가
netlify.toml
구성옵션을 만드는 파일생성
//netlify.toml
[build]
command = "npm run build"
functions = "functions" // 폴더이름. 원하는 이름 사용가능
publish = "dist"
[dev]
framework = "#custom"
command = "npm run dev:webpack"
targetPort = 8079
port = 8080
publish = "dist"
autoLaunch = false
//webpack.config.js
devServer: { port: 8079 } // 기본값은 8080
//package.json
scripts의 "dev" => "dev:webpack", "dev:netlify" => "dev" 로 변경
functions
폴더생성
폴더 내 TJ.js
파일 생성
workspace.js
생성
//TJ.js
exports.handler = async function() {
return {
statusCode: 200,
body: JSON.stringify({
name: 'TJ',
age: 26,
email: 'TJ@abc.com'
})
}
}
//workspace.js
const axios = require('axios')
exports.handler = async function (event) {
// API 함수를 가져오는데, fetch를 사용할 수 없기 때문에 axios패키지를 통해 사용
// npm i axios, 이후 axios에 맞게 코드 수정
}
터미널 npm run dev:netlify
localhost:5000/.netlify/functions/TJ 입력하면 API 확인가능
이처럼 숨겨야할 정보를 netlify 서버를 거쳐서 가져오면 됨
npx create-nuxt-app <project-name>
, cd nuxt-start
, code . -r
<RouterLink>
를 <NuxtLink>
로, <RouteView />
를 <Nuxt />
로 대신해서 사용해야 한다.
Route폴더에 js파일을 넣어 작성하지 않고, pages폴더에 파일과 폴더 구조를 통해 라우팅
를 별도의 html 파일이 아닌 `nuxt.config.js` 의 head에서 관리og
: open graph의 약어로 SEO를 위한 SPA의 SSR(서버사이드렌더링) 메타정보
style-resources
: scss의 variables를 등록시켜주는 모듈
server-middleware: 내부서버를 만들어 api를 제공
sanitizeHtml
Html의 태그를 없애 SEO최적화를 용이하게 만듦
HEROKU 서비스를 이용하여 배포