๊ธฐ๋ฅ์ ์์ฒญํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
๋ฒ๋
ํ์ฌ ํ๋์ ๋ฌด์์
๋๊น?
package.json์ ํตํด angular6์ "signature_pad": "^3.0.0-beta.3"์ ํฌํจํ์ต๋๋ค.
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์๋ํ์ง๋ง IE11์์๋ ์ค๋ฅ๋ก ์ธํด ์น ์ฌ์ดํธ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
์ค๋ช ์ด ์๋ "Syntaxerror" ๋ฌด์์ด ์๋ชป๋์์ต๋๋ค.
Angular 6 ๋น๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ ์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ Babel ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
webpack resolve.alias
๊ธฐ๋ฅ(ํ
์คํธ๋์ง ์์)์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ์ปดํ์ผ๋ ๋ฒ์ ์ ๋์ ๋ก๋ํ ์ ์์ต๋๋ค.
module.exports = {
//...
resolve: {
alias: {
signature_pad: 'signature_pad/dist/signature_pad.js'
}
}
};
๋น ๋ฅธ ์๋ต์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์๋ํด ๋ณด๊ฒ ์ต๋๋ค. ์์ด๋์ด๊ฐ ์๋ํ์ง ์์ผ๋ฉด babel polyfill๋ ์๋ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ ์ ์ฌ์ฉํ์ง ์์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ธ์ค์ญ์์ค.
๋ณ๊ฒฝ:
import SignaturePad from 'signature_pad';
์๊ฒ:
import * as SignaturePad from 'signature_pad/dist/signature_pad';
ํจ์ ๋ค์ด๋ก๋(dataURL, ํ์ผ ์ด๋ฆ) {
if (navigator.userAgent.indexOf("์ฌํ๋ฆฌ") > -1 && navigator.userAgent.indexOf("ํฌ๋กฌ") === -1) {
window.open(dataURL);
}
### //app.js์ ์๋ ๋ฌธ ์ถ๊ฐ - IE 11์์๋ ๋ค๋ฅธ ๋ ๊ฐ์ง๊ฐ ์ง์๋์ง ์์ผ๋ฏ๋ก ์๋ํฉ๋๋ค.
else if(window.navigator && window.navigator.msSaveOrOpenBlob){var blobwin = dataURLToBlob(dataURL);window.navigator.msSaveOrOpenBlob(blobwin, ํ์ผ ์ด๋ฆ);}
๋ ๋ค๋ฅธ {
var blob = dataURLToBlob(dataURL);
var url = window.URL.createObjectURL(๋ธ๋กญ);
var a = document.createElement("a");
a.style = "display: none";
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}
}
@sdqwerty ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ webpack์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ['browser', 'module', 'main']
๋ก ์ค์ ๋๋ mainFields ๋ผ๋ ํ๋๊ฐ ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๊ฒ๋ค์ ์ฐ์ ์์์ ์์ผ๋ฉฐ signature_pad๋ package.json ์ browser
๋ฅผ ํฌํจํ์ง ์์ผ๋ฏ๋ก ๋ชจ๋์ด ์ ํ๋ฉ๋๋ค. ์ด๊ฒ์ IE11์ด ์ง์ํ์ง ์๋ class์ ๊ฐ์ ES6 ๊ตฌ๋ฌธ์ ํฌํจํ๋ .m.js
ํ์ผ์ ๋งคํ๋ฉ๋๋ค.
@szimek ์ฌ๊ธฐ์์ npm์ ๊ถ์ฅ ์ฌํญ์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ํ๋๋ฅผ ํฌํจํ๋๋ก package.json์ ์
๋ฐ์ดํธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
https://docs.npmjs.com/files/package.json#browser
๊ทธ๋ฌ๋ฉด ์ด๋ฌํ IE11 ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
์ด๊ฒ์ ๋๋ฅผ ์ํด ์ผํ์ต๋๋ค.
module.exports = {
resolve: {
alias: {
'signature_pad': 'signature_pad/dist/signature_pad' // <- hier without '.js' at the end!
}
}
};
๊ทธ๋ฆฌ๊ณ Laravel-Mix์ ํจ๊ป:
mix.webpackConfig({
resolve: {
alias: {
'signature_pad': 'signature_pad/dist/signature_pad',
}
}
});
Angular 6 ๋น๋ ํ๋ก์ธ์ค๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์์ ์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋์ผํ Babel ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ปดํ์ผํด์ผ ํฉ๋๋ค.
webpack
resolve.alias
๊ธฐ๋ฅ(ํ ์คํธ๋์ง ์์)์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ด๋ฏธ ์ปดํ์ผ๋ ๋ฒ์ ์ ๋์ ๋ก๋ํ ์ ์์ต๋๋ค.module.exports = { //... resolve: { alias: { signature_pad: 'signature_pad/dist/signature_pad.js' } } };
v3.0.0-beta.4 ์ปดํ์ผ ๋ฒ์ ์ class
ํค์๋๋ก ์ธํด IE11์ ์ง์ํ์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ ธ์ค์ญ์์ค.
๋ณ๊ฒฝ:
import SignaturePad from 'signature_pad';
์๊ฒ:
import * as SignaturePad from 'signature_pad/dist/signature_pad';