(์๊ธ : Vue.js npm ํจํค์ง ํ์๋นํ )
์๋ ํ์ธ์. ๋ฉ๋์คํธ๋ฆผ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์๋ณดํ์ ๋๋ค.
3๊ฐ์์ ์ธํด ๊ธฐ๊ฐ์ ๊ฑฐ์ณ ์ผ๋ง ์ ํ๋ก ํธ ๋ฉค๋ฒ๋ก ํฉ๋ฅํ๊ฒ ๋๊ณ , ์ธํด ๊ธฐ๊ฐ์ค ์ค์ ์๋น์ค์์ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ฅผ ์คํ์์ค ํจํค์งํํ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ์ต๋๋ค.
์ข์ ๊ฒฝํ์ด์ง๋ง ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ์ค์ ์๋น์ค์์ ํจํค์งํ๋ฅผ ๊ฑฐ์น๋ ๋ฐฉ์์ ์ ํํ์ง ์์ํ ๋ฐ์. ์ธํด์ด์๊ธฐ์ ๊ฐ์ฌํ ๊ธฐํ๊ฐ ์ฃผ์ด์ก์ต๋๋ค. ( ์ด ์๋ฆฌ๋ฅผ ๋น์ด์ ๋ ์ข์ ํ๋ก์ ํธ๋ฅผ ์ ์ ํด์ฃผ์ ๋ฐ์ ๊ฐ์ฌ.. ๐ )
์ฌ๋ด์์ ์์ํ ๊ธฐ์ ์ธ๋ฏธ๋๋ฅผ ์์ํ๋ฉฐ ๊ฐ๋ฐ ๊ณผ์ ์ค ๊ฐ์น์๋ ๊ฒฝํ์ ์ ๋ฆฌํด ๊ณต์ ํด๋ณด์๋ ๊ธฐํ ์๋ ์ด๋ฒ ๊ธ์ ์์ฑํ์ต๋๋ค.
์ ์ฒด ๊ธ์ ํจํค์งํ์ ์ด์ ์ ๋ง์ท์ง๋ง, ๊ตฌํํ ์ปดํฌ๋ํธ์ ๊ดํด์๋ ๊ฐ๋ตํ ์ค๋ช ์ ํ๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
ํจํค์งํํ ์ปดํฌ๋ํธ๋ Modal ์ปดํฌ๋ํธ์ธ๋ฐ ์ผ๋ฐ์ ์ธ Modal์ ๊ตฌํ ๋ฐฉ์๊ณผ๋ ์ฐจ์ด์ ์ ๊ฐ์ ธ๊ฐ๊ธฐ๋ก ํ์ต๋๋ค.
< ์ผ๋ฐ์ ์ธ Modal ๋ฐฉ์ >
์์ฒ๋ผ App, Viewport, Modal์ด ์กด์ฌํ๊ณ ์์์ ๋ณธ ๋ชจ์ต์ด๋ผ๊ณ ํ์ ๋ ์ผ๋ฐ์ ์ผ๋ก Modal์ ์๋์ ๊ฐ์ด Viewport์ ์๋์ ์ธ ์์น์ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ Modal ๋ด๋ถ์ ์ปจํ ์ธ ๊ฐ ๋ง์ผ๋ฉด ์ด๋ป๊ฒ ํ ๊น์?
๊ทธ๋ด ๋๋ Modal์ Viewport๊ณผ ๊ฐ๊ฑฐ๋ ์๋๋ก ๋ง๋ค๊ณ Modal ๋ด๋ถ์ ์คํฌ๋กค์ ๊ฐ๋ฅํ๊ฒ ํด์ ํด๊ฒฐํฉ๋๋ค.
< ๊ตฌํํ Modal ๋ฐฉ์ : vue-fullpage-modal
>
๊ตฌํํ Modal ์ปดํฌ๋ํธ๋ ์กฐ๊ธ ๋ค๋ฅธ์์ผ๋ก Modal์ ๋์ฐ๋๋ก ํ์ต๋๋ค.
App์ ์ ์ ๋ฐฐ๊ฒฝ์ฒ๋ผ ๊ณ ์ ์ํจ ํ Modal์ด ๊ทธ ์๋ฆฌ๋ฅผ ๋์ ํ๊ฒ ๋ง๋๋ ๋ฐฉ์์ผ๋ก Modal์ ๋์ฐ๋๋ก ํ์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก Modal์ ๊ตฌํํ๋ฉด Modal ๋ด๋ถ์ ์ปจํ
์ธ ๊ฐ ๋ง๋ ์ ๋ ์คํฌ๋กค์ด Modal์ ๊ธฐ์ค์ผ๋ก ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์คํฌ๋กค์ ๊ด๋ จํ ์ด์๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ๋ด๋ถ์ ์ผ๋ก๋ fullpage๋ฐฉ์ Modal์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ก ํ์ต๋๋ค. ( ๊ทธ๋์ ์ปดํฌ๋ํธ ์ด๋ฆ์ด vue-fullpage-modal
์ด ๋์ต๋๋ค ๐ )
์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ ์ดํ์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก npm ํจํค์ง๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํ ์์ ์ ๋๋ค.
ํจํค์งํ์ ํ์์์๋ ์์ค์ฝ๋์ package.json ์ ๋๋ค.
๋ง๋งํ๊ธฐ ๋๋ฌธ์ ์ผ๋จ best practice๋ฅผ ๊ฒ์ํด๋ณด๊ณ , ๋ค๋ฅธ ํจํค์ง๋ค์ directory structure์ package.json๋ ์ดํด๋ดค์ต๋๋ค.
#
.
โโโ build/
โโโ libs/
โโโ src/
โโโ tests/
โโโ vendor/
โโโ package.json
Vue
# vue
.
โโโ .circleci/
โโโ .github/
โโโ benchmarks/
โโโ dist/
โโโ examples/
โโโ flow/
โโโ packages/
โโโ scripts/
โโโ src/
โโโ test/
โโโ types/
โโโ .babelrc.js
โโโ .editorconfig
โโโ .eslintignore
โโโ .eslintrc.js
โโโ .flowconfig
โโโ .gitignore
โโโ BACKERS.md
โโโ LICENSE
โโโ README.md
โโโ package.json
โโโ yarn.lock
11 directories, 11 files
vue-final-modal
# vue-final-modal
.
โโโ .github/
โโโ dist/
โโโ docs/
โโโ example/
โโโ lib/
โโโ tests/
โโโ types/
โโโ vetur/
โโโ .babelrc
โโโ .eslintignore
โโโ .eslintrc.js
โโโ .gitignore
โโโ .prettierrc.yaml
โโโ .travis.yml
โโโ LICENSE
โโโ README.md
โโโ jest.config.js
โโโ package.json
โโโ rollup.config.js
โโโ yarn.lock
8 directories, 12 files
//
{
"name": "package-name",
"version": "1.0.0",
"description": "A description to show on NPM",
"keywords": ["search tags"],
"author": "Your Name",
"license": "MIT",
"main": "./dist/index.js",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"repository": {
"type": "git",
"url": "https://github.com/..."
},
"scripts": {},
"devDependencies": {},
"dependencies": {}
}
Vue
//
{
"name": "vue",
"version": "2.6.14",
"description": "...",
"main": "dist/vue.runtime.common.js",
"module": "dist/vue.runtime.esm.js",
"unpkg": "dist/vue.js",
"jsdelivr": "dist/vue.js",
"typings": "types/index.d.ts",
"files": [
"src",
"dist/*.js",
"types/*.d.ts"
],
"sideEffects": false,
"scripts": { ... },
"gitHooks": {
"pre-commit": "lint-staged",
"commit-msg": "node scripts/verify-commit-msg.js"
},
"lint-staged": {
"*.js": [
"eslint --fix",
"git add"
]
},
"repository": {
"type": "git",
"url": "git+https://github.com/vuejs/vue.git"
},
"keywords": [
"vue"
],
"author": "Evan You",
"license": "MIT",
"bugs": {
"url": "https://github.com/vuejs/vue/issues"
},
"homepage": "https://github.com/vuejs/vue#readme",
"devDependencies": { ... },
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
}
vue-final-modal
//
{
"name": "vue-final-modal",
"version": "2.4.1",
"description": "...",
"private": false,
"main": "dist/VueFinalModal.umd.js",
"module": "dist/VueFinalModal.esm.js",
"jsnext:main": "dist/VueFinalModal.esm.js",
"unpkg": "dist/VueFinalModal.umd.js",
"jsdelivr": "dist/VueFinalModal.umd.js",
"types": "types/index.d.ts",
"files": [ "lib", "dist", ... ],
"scripts": { ... },
"devDependencies": { ... },
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.{js,jsx,vue}": [
"yarn lint"
]
},
"repository": {
"type": "git",
"url": "git+https://github.com/vue-final/vue-final-modal.git"
},
"author": "Hunter Liu",
"license": "MIT",
"bugs": {
"url": "https://github.com/vue-final/vue-final-modal/issues"
},
"homepage": "https://vue-final-modal.org",
"keywords": [ ... ],
"vetur": {
"tags": "vetur/tags.json",
"attributes": "vetur/attributes.json"
},
"peerDependencies": {
"vue": "^2.6.14"
}
}
๋ฆฌ์์น๋ฅผ ํด๋ณด๋ ์ฌ๋ฌ ํจํค์ง๋ค์์ ๋น์ทํ directory structure์ package.json ์์ฑ๋ค์ด ๋ฐ๋ณต๋์ต๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ Modal ํจํค์ง์ directory์ package.json์ ์์ํด๋ดค์ต๋๋ค.
directory ์ด๋ฆ๊ณผ package.json ์์ฑ์ ์ด๋ฆ์ผ๋ก ์ญํ ์ถ์ธก์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์์ํด๋ณด๋ ๊ฒ์ด ์ด๋ ต์ง ์์์ต๋๋ค.
.
โโโ (dist/)
โโโ docs/
โโโ src/
โโโ .gitignore
โโโ LICENSE
โโโ README.md
โโโ package.json
โโโ webpack.config.js
dist
๋๋ ํ ๋ฆฌ์ ์๊ดํธ๊ฐ ์๋ ์ด์ ๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ๊ณผ์ ์์๋ง ์์ฑ๋ ๋๋ ํ ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.{
"name": "my-package",
"version": "0.1.1",
"description": "good package",
"main": "dist/myPackage.js",
"scripts": {
"build": "webpack"
// ...
},
"files": [ "src", "dist/*.js" ], // files๋ ์ถ๊ฐ๋ก ์ค๋ช
ํ ์์ฑ
"repository": {
"type": "git",
"url": "https://github.com/medistream-team/vue-fullpage-modal"
},
"keywords": [ "vuejs", "component", "vue" ],
"author": "my-id",
"license": "MIT",
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": {
"@babel/core": "^7.13.16",
"webpack": "^4.45.0"
// ...
}
}
files
๋ ์ถ๊ฐ๋ก ์ค๋ช
ํ ์์ฑ์
๋๋ค.
.
โโโ package.json
โโโ index.js
โ
.
โโโ docs/
โโโ src
โ โโโ Component.vue
โ โโโ index.js
โโโ package.json
โโโ LICENSE
โโโ README.md
โ
.
โโโ docs/
โโโ src
โ โโโ Component.vue
โ โโโ index.js
โโโ package.json
โโโ LICENSE
โโโ README.md
โโโ webpack.config.js
{
"name": "my-package",
"version": "0.0.1"
}
name
๊ณผ version
๋ง ์์ด๋ ํจํค์งํ๊ฐ ๊ฐ๋ฅํ์ต๋๋ค.
โ
{
"name": "my-package",
"version": "0.1.0",
"repository": {
"type": "git",
"url": "https://github.com/my-id/my-package"
},
"license": "MIT",
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": {
"@babel/core": "^7.13.16",
// ...
}
}
โ
{
"name": "my-package",
"version": "0.1.1",
"description": "good package",
"main": "dist/myPackage.js",
"scripts": {
"build": "webpack"
// ...
},
"files": [ "src", "dist/*.js" ],
"repository": {
"type": "git",
"url": "https://github.com/medistream-team/vue-fullpage-modal"
},
"keywords": [ "vuejs", "component", "vue" ],
"author": "my-id",
"license": "MIT",
"dependencies": {
"vue": "^2.5.2"
},
"devDependencies": {
"@babel/core": "^7.13.16",
"webpack": "^4.45.0"
// ...
}
}
์์ค์ฝ๋์ package.json์ด ์ค๋น๋๋ค๋ฉด ๋ฐ๋ก publish๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ ์ง๋ง ๋ณดํต build ๊ณผ์ ์ ํตํด ํจํค์ง์ ์ฉ๋์ ์ค์ด๊ณ , ์ฌ๋ฌ ๋ชจ๋ ์์คํ ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๋ฑ ์ถ๊ฐ์ ์ธ ๋ณด์ ์์ ์ ํด์ค๋๋ค.
build
๋น๋ ํด๋ก๋ rollup, parcel, webpack, vite ๋ฑ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์ ๋น ๋ฅธ ๋น๋ ์๋๋ก ์ฃผ๋ชฉ์ ๋ฐ๊ณ ์๋ vite๋ฅผ ์ฌ์ฉํ ๊น ๊ณ ๋ คํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ vue2๋ฅผ ๊ณต์์ ์ผ๋ก๋ ์ง์ํ์ง ์๋ ๋ฑ์ ์ํฉ์ด ์๊ณ , ๋น๋ ์๋๊ฐ ๊ฒฐ์ ์ ์ธ ๊ณ ๋ ค ์์๊ฐ ์๋์๊ธฐ ๋๋ฌธ์ ์ ํต์ ์ธ webpack์ ์ฌ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค.
ํจํค์ง์ ๋ง๊ฒ webpack์ ์ค์ ํด์ค ๋ค ๋น๋๋ฅผ ํฉ๋๋ค.
npm run build
Hash: 3gfsdc123...
Version: webpack 4.46.0
Time: 1654ms
Built at: 07/07/2021 12:35:23 PM
Asset Size Chunks Chunk Names
myPackage.js 27.3 KiB 0 [emitted] main
dist
, ํ์ผ์ด๋ฆ์ myPackage.js
๋ก ์ ํ๊ธฐ ๋๋ฌธ์ dist/myPackage.js
ํ์ผ์ด ์์ฑ๋ฉ๋๋ค.package๊ฐ ์ฝ์ด๋ค์ผ ํ์ผ ์ง์
import 'my-package'
๋ฅผ ํ ๋ ์ฝ์ด๋ค์ด๋ ํ์ผ์ package.json์ main
์์ฑ์ ์ง์ ๋ ํ์ผ์
๋๋ค. ๊ธฐ๋ณธ main
์์ฑ์ ํจํค์ง root ํด๋์ index.js๋ก ์ง์ ๋๊ธฐ ๋๋ฌธ์ ๋ช
์์ ์ผ๋ก ๋น๋๋ ํ์ผ๋ก ์ง์ ํด์ค๋๋ค.
# package.json
{
...
"main": "dist/myPackage.js"
...
}
publish
๋น๋๊ฐ ๋๊ณ package.json ์ค์ ์ด ์๋ฃ๋์ผ๋ฉด publish๋ฅผ ํ ์ค๋น๊ฐ ๋์ต๋๋ค! ๐
> npm run publish
npm notice
npm notice ๐ฆ my-package@0.1.1
npm notice === Tarball Contents ===
npm notice 27.3kB dist/myPackage.js
npm notice 42.2kB src/components/MyComponent.vue
npm notice 1.2kB src/index.js
npm notice 1.0kB package.json
npm notice 1.9kB README.md
npm notice === Tarball Details ===
npm notice name: my-package
npm notice version: 0.1.1
npm notice package size: 12.1 kB
npm notice unpacked size: 45.5 kB
npm notice shasum: 2asdfasdfsdfsdfsa9b0857858dd295cd8801449
npm notice integrity: sha512-NFHSDASDFAa5T[...]Kx1kpZyiJ5KZA==
npm notice total files: 5
npm notice
+ my-package@0.1.1
files
ํ์ง๋ง ํฌํจ๋ ํ์ผ๋ค์ ์ดํด๋ณด๋ฉด ์กฐ๊ธ ์ด์ํ ์ ์ด ์์ต๋๋ค.
์ค์ ๋ก ํจํค์ง์ ํฌํจํ๊ณ ์ถ์๊ฑด dist/myPackage.js
ํ์ผ๋ง์ธ๋ฐ, index.js
๋ MyComponent.vue
ํ์ผ๋ ๊ฐ์ด ํฌํจ๋ผ์์ต๋๋ค.
์ด๋ npm publishํ ๋ ๊ธฐ๋ณธ์ค์ ๋๋ฌธ์ธ๋ฐ์. ๊ธฐ๋ณธ์ ์ผ๋ก ํจํค์ง root ๋๋ ํ ๋ฆฌ ์์ ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ชจ๋ ํฌํจํ๋๋ก ๋ผ์์ต๋๋ค. ์ํ๋ ํ์ผ๋ง ํฌํจ์์ผ์ฃผ๊ธฐ ์ํด์ package.json์ files ์์ฑ์ ์ฌ์ฉํฉ๋๋ค.
{
...
"files": "dist" // ํน์ "files": "dist/myPackage.js"
...
}
.npmignore
ํ์ผ๊ณผ ๋น๊ตํด์ ๋ค์ ์ถ๊ฐ ์ค๋ช
์ ํ๊ฒ ์ต๋๋ค.* ์ค์ ๋ก๋ vue plugin์ ํจํค์งํํ ๊ฒ
Component๋ฅผ ๋ง๋ค์์ง๋ง Vue์์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค๊ณ , ํ๋ฌ๊ทธ์ธ์ ํตํด์ ์ปดํฌ๋ํธ๋ฅผ ๋ฑ๋กํ๋ ๊ณผ์ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ํจํค์ง์ main ํ์ผ์ ์ฌ์ค plugin์ ๊ฐ๋ฆฌํต๋๋ค.
import MyComponent from 'my-component'
Vue.<use(MyComponent)
// ๋ด๋ถ์ ์ผ๋ก ๋ฒ์ด์ง๋ ์ผ
Vue.component('my-modal', MyModal)
Vue.$myFunction = function(){ ... }
๋ฑ๋ฑ..
์ด๋ ๊ฒ npm package๋ฅผ publish ํ์ต๋๋ค.
ํจํค์ง publish๊น์ง์ ๊ณผ์ ์ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์๊ณ ์ด์ ์ข ๋ ๊น์ ๋ด์ฉ์ผ๋ก ๋์ด๊ฐ๋ณผ๊น ํฉ๋๋ค.
JavaScript์๋ CommonJS, ES Module, AMD ๋ฑ ์ฌ๋ฌ ๋ชจ๋ ์์คํ ์ด ์์ต๋๋ค.
์์ฃผ ๊ฐ๋ตํ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค. ์์ธํ ๋ค๋ฃฌ ๊ธ๋ค์ ๋์ ์ถ๊ฐํด๋จ์ผ๋ ์ฝ์ด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.
CommonJS
๋๊ธฐ์ ์ผ๋ก ์๋ํ๊ณ , ์ฌํํ ์ฌ์ฉ๋ฐฉ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. Node.js์์ ์ฒ์ ๋์ ๋๋งํผ ์๋ฒ์ฌ์ด๋์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํฉ๋๋ค.
AMD
๋น๋๊ธฐ๋ฅผ ์ง์ํ๋ ํน์ง์ด ์์ต๋๋ค. Frontend์์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋์ ๋ ๋ชจ๋ ์์คํ ์ ๋๋ค.
ESM
์๋ฐ์คํฌ๋ฆฝํธ ๊ณต์ ๋ชจ๋ ์์คํ ์ผ๋ก ๋น๋๊ธฐ์ ์ธ ํน์ง๊ณผ CommonJS์ ์ฌํํ ์ฌ์ฉ๋ฐฉ์์ ๋ชจ๋ ๊ฐ์ง๊ณ ์์ต๋๋ค.
UMD
ํ์ง๋ง ์ฌ์ ํ CommonJS ๋ฐฉ์๊ณผ ESM, ์ ๋ ์ ์ ํด๋ณด์ง ๋ชปํ์ง๋ง AMD ๋ฐฉ์๋ ํผ์ฉํด์ ์ฌ์ฉ๋๊ณ ์๋ ์ํ๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฐ ํผ์ฉ์ผ๋ก ์ธํ ๋ณต์กํจ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ฉ์ผ๋ก ์ฐ๋ ๋ฐฉ์์ด UMD์ธ๋ฐ์. ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์ ๋ชจ๋ ์์คํ ์ ๋ฐ๋ผ CommonJS, ES Module, AMD์์ ํจํค์ง๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋๋ค. ์ ํํ๋ ๋์์ธ ํจํด์ ๊ฐ๊น๋ค๊ณ ํฉ๋๋ค.
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(['exports', 'b'], factory);
} else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
// CommonJS
factory(exports, require('b'));
} else {
// Browser globals
factory((root.commonJsStrict = {}), root.b);
}
}(this, function (exports, b) {
//use b in some fashion.
// attach properties to the exports object to define
// the exported module properties.
exports.action = function () {};
}));
// https://riptutorial.com/javascript/example/16339/universal-module-definition--umd-
webpack์ ํตํ ๋ชจ๋ ์์คํ ์ ํ
webpack์์๋ ์ด๋ฏธ ๋ชจ๋ ์์คํ ์ ์ ํํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
// webpack.config.js
{
...
"output": {
"libraryTarget": "umd",
...
}
...
}
package.json์์๋ ์ฌ๋ฌ ์์ฑ๋ค ์ค ๋ ์ดํด๋ณผ๋งํ ์์ฑ๋ค์ด ์์ต๋๋ค.
ํจํค์ง์ ํฌํจํ ํ์ผ๋ค์ ์ง์ ํด์ฃผ๋ ์์ฑ์ ๋๋ค.
ํจํค์ง์ ํฌํจํ ํ์ผ์ ์ค์ ํ๋ 2๊ฐ์ง ๋ฐฉ์์ด ์์ต๋๋ค.
blacklist๋ฐฉ์์ธ .npmignore
์ whitelist ๋ฐฉ์์ธ files
์์ฑ์
๋๋ค.
์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ git repository๋ฅผ ๋์๋ค๋๋ค๋ณด๋ฉด .npmignore
๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์ด ๊ฑฐ์ ์๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. .npmignore
๊ฐ ๋ณดํธ์ ์ธ ๋ฐฉ์์ธ์ค ์์๊ธฐ์ ์ด ์ฌ์ค์ ๊ฝค๋ ๋๋์๋๋ฐ, ์ฌ๊ธฐ์๋ ์ด์ ๊ฐ ์์์ต๋๋ค.
.npmignore์ฌ์ฉ ์ ์ฃผ์ํ ์
.gitignore
์ .npmignore
๊ฐ ๋์์ ์กด์ฌํ ๋ npm์์๋ .npmignore
๋ง ์ฐธ์กฐํฉ๋๋ค.
.gitignore
๋ง ์์ผ๋ฉด npm์์ .gitignore
๋ฅผ ์ฐธ์กฐํด์ ํจํค์ง์ ํฌํจํ ํ์ผ์ด๋ ํด๋๋ฅผ ๊ฒฐ์ ํ๋๋ฐ, ๋ ๋ค ์กด์ฌํ๋ฉด .gitignore
์ ๋ด์ฉ์ ๋ฌด์ํ๊ณ .npmignore
์ ๋ด์ฉ๋ง ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ํท๊ฐ๋ฆด ์ ์๋ ์ฌ์ง๊ฐ ์์ต๋๋ค.
๋ํ blacklist ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ํ์ผ์ด๋ ํด๋๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ์ด๋ฅผ blacklist์ ์ถ๊ฐํด์ค์ผํฉ๋๋ค.
whitelist ๋ฐฉ์์์๋ ํจํค์ง ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด whitelist์ ์ถ๊ฐํด์ผํด์ ์กฐ์ผ๋ชจ์ฌ๊ฐ ์๋๊ฐ ์ถ์๋ฐ, AWS Crendential ๊ด๋ จ ํ์ผ ๋ฑ ํจํค์ง์ 'ํฌํจ๋์ง ์์์ผํ ํ์ผ์ด ํฌํจ๋๋ ๊ฒ'์ด ์๋นํ risk๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ blacklist ๋ฐฉ์๋ณด๋ค whitelist ๋ฐฉ์์ด ๋ ์์ ํ๋ค๊ณ ํ ์ ์์ต๋๋ค.
x.y.z
์ ํํ์ ๋ฒ์ ๋์ semantic versioning. ์ค์ฌ์ semver๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. npm์ ์ฌ๋ฌ ํจํค์ง๋ค์ ์ฌ์ฉํ๋ฉด์ ๋์ผ๋ก๋ ์ต์ํ์ง๋ง ์ค์ ๋ก ์ด๋ค ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋์ง๋ ๋ชฐ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ๊ธฐํ์ versioning์ ๋ํด์๋ ์ฐพ์๋ดค์ต๋๋ค.
์ฃผ์ ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ๋์ง ์๊ฒ API๊ฐ ๋ฐ๋๋ฉด x
๋ฅผ ์ฌ๋ฆฌ๊ณ (major ๋ฒ์ )
๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ์ด ๋๋ฉด์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด y
๋ฅผ ์ฌ๋ฆฌ๊ณ (minor ๋ฒ์ )
๊ธฐ์กด ๋ฒ์ ๊ณผ ํธํ์ด ๋๋ฉด์ ๋ฒ๊ทธ๊ฐ ์์ ๋ ๊ฒ์ด๋ผ๋ฉด z
๋ฅผ ์ฌ๋ฆฝ๋๋ค. (patch ๋ฒ์ )
major ๋ฒ์ 0(0.y.z
)์ ์ด๊ธฐ ๊ฐ๋ฐ์ ์ํด ์๋๋ค. ์๋ฌด ๋๋ ๋ง์๋๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ์์ ํ์ผ๋ก ๋ณด์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
patch๋ฒ์ ๋ฐ๋ก ๋ค์ ๋ถ์ํ(-)๋ฅผ ๋ถ์ด๊ณ ๋ง์นจํ(.)๋ก ๊ตฌ๋ถ๋ ์๋ณ์๋ฅผ ๋ํด์ ์ ์ ๋ฐฐํฌ๋ฅผ ์๋ (pre-release) ๋ฒ์ ์ ํ๊ธฐํ ์ ์์ต๋๋ค. ์๋ณ์๋ ๋ฐ๋์ ์์คํค(ASCII) ๋ฌธ์, ์ซ์, ๋ถ์ํ๋ก๋ง ๊ตฌ์ฑํฉ๋๋ค[0-9A-Za-z-]. ์ ์๋ฐฐํฌ ์ ๋ฒ์ ์ ์์ง ๋ถ์์ ํ๋ฉฐ ์ฐ๊ด๋ ์ผ๋ฐ ๋ฒ์ ์ ๋ํด ํธํ์ฑ ์๊ตฌ์ฌํญ์ด ์ถฉ์กฑ๋์ง ์์ ์๋ ์์ต๋๋ค. ์: 1.0.0-alpha
, 1.0.0-alpha.1
, 1.0.0-0.3.7
, 1.0.0-x.7.z.92.
~
๋ฅผ ๋ถ์ด๋ Tilde Ranges์ ^
๋ฅผ ๋ถ์ด๋ Caret Ranges ๋ ๋ด์ฉ์ด ์กฐ๊ธ ๊ธธ์ด ์๋์ ์ข์ ๋งํฌ๋ก ๋์ฒด ํฉ๋๋ค.
๋ค.. ํจํค์ง๋ฅผ ์ถ์ํด์ ๋์ด๋์ค ์์๋๋ฐ ๋ฌธ์ํ๊ฐ ๋จ์์ต๋๋ค..
๋ค๋ฅธ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ค๋ฉด ๋ฌธ์ํ๊ฐ ์์ฃผ ์ค์ํฉ๋๋ค. ๋์ฒดํ ์ ์๋ ๋ค๋ฅธ ํจํค์ง๋ค์ด ์๊ธฐ ๋๋ฌธ์ ์ ๊ฐ ๊ฐ๋ฐํ ๋ด์ฉ์ ์ฌ์ฉ๋ฒ์ ๊ฐ๋ ์ฑ ์๊ฒ ์๋ ค์ค ์ ์๋ ๋ฌธ์ํ๊ฐ ์์ฃผ ์ค์ํ์ต๋๋ค.
README.md
์ ์ฅ์๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ์ฒซ ๋์ ์์๋ถํฐ, ์ค์น์ ์ฌ์ฉ๊น์ง ๊ฐ๋จํ๊ฒ ๋์ ๋ค์ด์ค๊ฒํ๊ณ ์ถ์์ต๋๋ค.
simple is the best!!
Documentation
๋ฌธ์๋ ๋ณผ ์ ์๊ณ ์กฐ์ํด๋ณผ ์ ์๋ ์์ ์์ฃผ๋ก ๊ตฌ์ฑํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
์ถ์ ํ ์ฝ ํ๋ฌ
์ถ์ ํ ์ฝ ํ๋ฌ์ด ์ง๋ ์์ ์ 5๋ช ์ ์ ํ ๋ชจ๋ฅด๋ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค๐ฎ . ์ด๋ ํ ํ๋ณด๋ ํ์ง ์์๋๋ฐ ์ด๋ป๊ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์๋์ง ์ฐธ ์ ๊ธฐํ์ต๋๋ค. ์์ gif ์ด๋ฏธ์ง๋ฅผ ๋ดค์ ๋ ๋ชจ๋ฐ์ผ Navigation drawer ๊ฐ์ ๋ณด์ฌ์ ๋์ ํ์ง ์์์๊น ํฉ๋๋ค.
ํ๋ฌ ๋์ ์์ ์ ํ์ง๋ง 1.0.0 ๋ฒ์ ์ ์ถ์ํ ์ ๋๊น์ง ๋์ง ๋ชปํ์ต๋๋ค. ํด์ผํ ๋ค๋ฅธ ์ผ๋ค์ด ์์๊ธฐ ๋๋ฌธ์ ๋ ๋ฏธ๋ฃจ์ง ๋ชปํ๊ณ 0.x ๋ฒ์ ์ผ๋ก ์ค์ ์๋น์ค์์ ํ์ํ์ ๋๋ก๋ง ํจํค์ง๋ก ์์ฑํ๊ณ ์ดํ ํ์์ ๋ฐ๋ผ ๋ฐ์ ์ํค๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ปดํฌ๋ํธ ๊ตฌํ๋ถํฐ npm ํจํค์ง ์ถ์๊น์ง ์ผ๋ จ์ ๊ณผ์ ์ ๊ฒช์ด๋ณด๋ ๋๋ผ๋ ์ ๋ค์ด ์์์ต๋๋ค.
ํจํค์ง์ ๋น์์ฑ, ํ์์ฑ์ด ์ค์ํ ๊ฒ ๊ฐ๋ค.
'ํจํค์ง๊ฐ ์ ์กด์ฌํด์ผํ๋์ง, ์ ๋ง ์ ์ฉํ์ง'๊ฐ ๊ฒฐ๊ตญ ์ค์ํ ๊ฒ ๊ฐ์์ต๋๋ค. ํจํค์งํ๋ฅผ ํ๋ ค๊ณ ์์ํ๊ธฐ๋ณด๋ค ํ์ํ ๊ฒ์ด ์์ด์ ๋ง๋ค๊ณ ์ดํ์ ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํด์ ํจํค์งํ๋ฅผ ํ๋ ๊ฒ์ด ์์์ ๋ง๋ ๊ฒ ๊ฐ์์ต๋๋ค.
๊ทธ๋์ ์์๋ฅผ ๋ชจ๋ฐ์ผ์์ฃผ๋ก ๊ตฌ์ฑํ์ต๋๋ค. vue-fullpage-modal
์ด pc, mobile์์ ๋ชจ๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง Viewport๊ฐ ์์๋ ์ ์ฉํ Modal์ ๋ง๋ค๊ธฐ ์ํด ์ถ๋ฐํ๊ธฐ๋๋ฌธ์ ๊ทธ๊ฑธ ๋ช
ํํ ๋ํ๋ด๊ธฐ๋ก ํ์ต๋๋ค. ( ๋ฌธ์์ pc ์์๋ ๋ฃ์ด์ผ ํ๋๋ฐ .. ํญ์ ๋
ธ์ค๋ ฅ์ด ๋ถ์กฑํ๋ฏ ํฉ๋๋ค )
๋ฌธ์ํ์๋ ์์์ ๋ง์ด ํ ๋นํ์
์ค์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๋๋ฐ ์ ๋ฐ์ ์๊ฐ ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ํ์ ๋๋จธ์ง ์ ๋ฐ์ด ์์๋์ต๋๋ค. ๊ทธ๋๋ ์ฌ์ ํ ๋ฐ์ ์ํค๊ณ ์ถ๊ฐํด์ผํ๋ ๋ด์ฉ์ด ๋ง์ด ๋จ์ ์์ต๋๋ค. ๋ฌธ์ํ๋ฅผ ํ์ง ์์ผ๋ฉด ํจํค์ง๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฐ์๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋์ง ์๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ต๊ณ , ๋๋ฌด ๋ณต์กํ๊ฑฐ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๋ฌธ์๋ ์๋ ๊ฒ๊ณผ ๋๊ฐ๊ธฐ ๋๋ฌธ์ ์ข์ ๋ฌธ์๋ฅผ ์ํด ๋ง์ ์๊ฐ์ ์ฌ์ฉํด์ผ ํ์ต๋๋ค.
๊ทธ๋์ ๊ณํ์ ์งค ๋๋ ๊ตฌํ ๋ฟ๋ง์ด ์๋๋ผ ๋ฌธ์ํ์ ๋ง์ ๊ด์ฌ์ ์์์ผํฉ๋๋ค.
์คํ์์ค๋ฅผ ์งํฅํ๋ค๋ฉด ํ์ํ ๊ฒ๋ค์ด ๋ ๋ง๋ค.
์คํ์์ค ํจํค์ง๋ผ๊ณ ํ๊ธฐ์๋ ์์ง ๋ ํ์ํ ๊ฒ๋ค์ด ๋ง์ต๋๋ค. ๋จ์ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ์ฌ๋๋ค์ด ์์ค์ฝ๋๋ฅผ ๋ฐ์ ์ํค๊ณ ๋์์ฃผ๋ ๊ฒ์ด ์ค์ํ๊ธฐ์ ์๋์ ๊ฐ์ ๊ธฐ๋ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ํ์ํ์ต๋๋ค.
๋ฑ๋ฑ ..
์ด๋ ๊ฒ npm ํจํค์งํ์ ๊ฒฝํ์ ๊ธ๋ก ์ ๋ฆฌํด๋ดค์ต๋๋ค. ์ฒ์๋ถํฐ ๋๊น์ง ํด๋ณธ ๊ฒฝํ์ ๊ฐ์ธ์ ์ธ career path ํ์ฑ์ ์ข์ ๋ฐ์์ทจ๋ก ๋จ์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ธ์ ์ฝ๊ณ ์ฝ๊ฐ์ ๊ฐ์ ๊ฒฝํ์ด๋ผ๋ ๋๋ค๋ฉด ์ข๊ฒ ์ต๋๋ค. ๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด์ ๋ฉ๋์คํธ๋ฆผ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์๋ณดํ์ด์์ต๋๋ค.
๋ชจ๋ ์์คํ
files
semver
๐ผ ์ฑ์ฉ ํ์ด์ง ๋ฐ๋ก๊ฐ๊ธฐ
๋ฉ๋์คํธ๋ฆผ์์๋ ํ๋ฅญํ ์ธ์ฌ๋ฅผ ์ ๊ทน ์ฑ์ฉ์ค์
๋๋ค.
ํ์๊ณ์ ์๋ก์ด ํ๋ฆ์ ํฉ๋ฅํ์ธ์.
์ดํด๊ฐ ์์~~