Webpack 2๋ฅผ ์ฌ์ฉํ๋๋ก ์ฑ์ ์ ๋ฐ์ดํธํ๊ณ ์์ต๋๋ค. webpack 1์ ๋ก๋ํ๋ฉด ngtable์ด ์ ๋๋ก ์๋ํ์ง๋ง webpack 2๋ฅผ ๋ก๋ํ๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์ฝ์์ GET http://app.finderbox.dev/app/ng-table/pager.html 404 (Not Found)
๋ฉ๋๋ค. ํ
์ด๋ธ์ ๋ก๋ํ๋ ๊ตฌ์ฑ ์์์์ ์ผ๋ถ ๋ก๊ทธ ์ถ๋ ฅ์ ์ค์ ํฉ๋๋ค.
$templateCache.get('http://app.finderbox.dev/app/ng-table/pager.html'): undefined
$templateCache.get('http://app.finderbox.dev/ng-table/pager.html'): undefined
$templateCache.get('ng-table/pager.html'): Promise {$$state: Object}
ngtable์ด ๋ค๋ฅธ ID๋ก ํ
ํ๋ฆฟ์ ๋ก๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@TheLarkInn : webpack ์ธก์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ฐํ์ญ๋๊น?
@faceleg : ๊ทํ์ ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๊น https://github.com/esvit/ng-table/issues/957 ?
์ด ๋ฌธ์ ๋ https://github.com/esvit/ng-table/issues/957์ ๋ณต์ ๋ณธ์ผ๋ก ํจ์ฌ ๋ ๋ช ํํ๊ฒ ์ค๋ช ๋์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. :D
๋๋ฅผ ์ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํ ํ๋ฆฟ์ ์บ์์ ์๋์ผ๋ก ๋ฃ๋ ๊ฒ์ ๋๋ค.
ng-table.js์์ ์นํฉ ์์ฑ ๋ถ๋ถ์ ๊ฐ์ ธ์ ๋ด ๋ถํธ์คํธ๋ฉ ๊ธฐ๋ฅ์ ๋ฃ์ต๋๋ค. ๋๋๊ฒ๋ ์ด์ console.log์์ $templateCache.get('ng-table/pager.html')
์ ์ถ๋ ฅ์ ์ฝ์์ด ์๋๋ผ ํ
ํ๋ฆฟ ๋ฌธ์์ด์
๋๋ค.
/* 42 */
/* unknown exports provided */
/*!********************************!*\
!*** ./src/browser/pager.html ***!
\********************************/
/***/ function(module, exports, __webpack_require__) {
var path = 'ng-table/pager.html';
var html = "<div class=\"ng-cloak ng-table-pager\" ng-if=\"params.data.length\">\n <div ng-if=\"params.settings().counts.length\" class=\"ng-table-counts btn-group pull-right\">\n <button ng-repeat=\"count in params.settings().counts\" type=\"button\"\n ng-class=\"{'active':params.count() == count}\"\n ng-click=\"params.count(count)\" class=\"btn btn-default\">\n <span ng-bind=\"count\"></span>\n </button>\n </div>\n <ul ng-if=\"pages.length\" class=\"pagination ng-table-pagination\">\n <li class=\"page-item\" ng-class=\"{'disabled': !page.active && !page.current, 'active': page.current}\" ng-repeat=\"page in pages\" ng-switch=\"page.type\">\n <a class=\"page-link\" ng-switch-when=\"prev\" ng-click=\"params.page(page.number)\" href=\"\">«</a>\n <a class=\"page-link\" ng-switch-when=\"first\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a>\n <a class=\"page-link\" ng-switch-when=\"page\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a>\n <a class=\"page-link\" ng-switch-when=\"more\" ng-click=\"params.page(page.number)\" href=\"\">…</a>\n <a class=\"page-link\" ng-switch-when=\"last\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a>\n <a class=\"page-link\" ng-switch-when=\"next\" ng-click=\"params.page(page.number)\" href=\"\">»</a>\n </li>\n </ul>\n</div>\n";
var angular = __webpack_require__(/*! angular */ 0);
angular.module('ng').run(['$templateCache', function(c) { debugger; c.put(path, html) }]);
module.exports = path;
@faceleg ์ฐธ๊ณ ๋ก
๋ฒ๋ค ํฌ๊ธฐ์ ์ด๋ค ์ํฅ์ ์ค๋๊น?
Webpack 2.2์์ ngTable์ ์ฌ์ฉํ ๋ ์ผ๋ถ ๋๋ฝ๋ html ํ ํ๋ฆฟ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. /bundles ๋๋ ํ ๋ฆฌ์์ ngTable ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ํ์ฌ๋ก์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๊น์ต๋๋ค.
import { ngTableModule } from 'ng-table/bundles/ng-table';
angular.module('myapp', [
ngTableModule.name
]);
๊ฐ์ฌํฉ๋๋ค @Boosten , ์ด๊ฒ์ ์ ์๊ฒ
๋๋์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
'ng-table/src/browser'
html ํ์ผ๊ณผ ํํฐ ํด๋๋ฅผ ๋ด webroot '~/ng-table/'
์ ng-table ํด๋๋ก ๋ณต์ฌํ์ต๋๋ค.
webpack์ ์ฌ์ฉํ์ง ์๊ณ typescript w/o ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. ๋ณธ์ง์ ์ผ๋ก ์ปดํ์ผ๋ ES5 ์ฑ์ผ ๋ฟ์
๋๋ค. (๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ์ญ์ด ์๋๊ฑฐ๋ @types ๋๋ ํ ๋ฆฌ ์ธ๋ถ์ ์์ ๋ ๋น๋ชจ๋ ํ๋ก์ ํธ์ ์
๋ ฅ์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๊ณ์ ์์ ๋ด๋ ค๊ณ ๋
ธ๋ ฅ ์ค์
๋๋ค.)
๋ํ 'ng-table/src/browser/date.html'
์ด(๊ฐ) ์์ต๋๋ค.
npm์์ ng-table์ ์ค์นํ์ผ๋ฉฐ ๋ฒ์ 3.0.1์
๋๋ค.
webpack.config.js ํ์ผ(Webpack 3.11.0 ์ฌ์ฉ)์์ ๋ค์์ผ๋ก Webpack์ ๊ตฌ์ฑํ์ฌ ์๋ ๋จ๊ณ ์์ด ํ ํ๋ฆฟ์ ๋ก๋ํ ์ ์์์ต๋๋ค.
module: {
rules: [
// ...
{ test: /ng-table\/.*\.html$/, use: ['ngtemplate-loader?requireAngular&relativeTo=/src/browser/&prefix=ng-table/', 'html-loader'] }
]
}
๋ํ ngtemplate-loader
๋ฐ html-loader
NPM ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ์ผ๋จ ์๋ฃ๋๋ฉด ์ด ๊ตฌ์ฑ์ Webpack 3.x๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์๋ ๊ทธ๋๋ก ์๋ํด์ผ ํฉ๋๋ค. (Webpack 2.x ๋๋ 4.x์ ๊ฒฝ์ฐ ๋น์ทํ ์ค์ด ์๋ํ์ง๋ง Webpack ๊ตฌ์ฑ ํ์ผ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ์ ์์ต๋๋ค). ์ด๋ก ์ธํด Webpack์ ํ
ํ๋ฆฟ์ ๋ค์๊ณผ ๊ฐ์ด vendor.bundle.js
ํ์ผ๋ก ์ปดํ์ผํฉ๋๋ค.
/* 570 */
/***/ (function(module, exports, __webpack_require__) {
// Module
var code = "<div class=\"ng-cloak ng-table-pager\" ng-if=\"params.data.length\"> <div ng-if=\"params.settings().counts.length\" class=\"ng-table-counts btn-group pull-right\"> <button ng-repeat=\"count in params.settings().counts\" type=\"button\" ng-class=\"{'active':params.count() == count}\" ng-click=\"params.count(count)\" class=\"btn btn-default\"> <span ng-bind=\"count\"></span> </button> </div> <ul ng-if=\"pages.length\" class=\"pagination ng-table-pagination\"> <li class=\"page-item\" ng-class=\"{'disabled': !page.active && !page.current, 'active': page.current}\" ng-repeat=\"page in pages\" ng-switch=\"page.type\"> <a class=\"page-link\" ng-switch-when=\"prev\" ng-click=\"params.page(page.number)\" href=\"\">«</a> <a class=\"page-link\" ng-switch-when=\"first\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a> <a class=\"page-link\" ng-switch-when=\"page\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a> <a class=\"page-link\" ng-switch-when=\"more\" ng-click=\"params.page(page.number)\" href=\"\">…</a> <a class=\"page-link\" ng-switch-when=\"last\" ng-click=\"params.page(page.number)\" href=\"\"><span ng-bind=\"page.number\"></span></a> <a class=\"page-link\" ng-switch-when=\"next\" ng-click=\"params.page(page.number)\" href=\"\">»</a> </li> </ul> </div> ";
// Exports
var _module_exports = code;;
var path = 'ng-table/pager.html';
var angular = __webpack_require__(0);
angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);
module.exports = path;
/***/ }),
๊ฒฝ๋ก๊ฐ ng-table/pager.html
์์ ์ฃผ๋ชฉํ์ญ์์ค. relativeTo=/src/browser/
์นํฉ์ ๊ตฌ์ฑ์ ์ผ๋ถ๊ฐ ํ์ node_modules/ng_table/src/browser/pager.html
๋ก pager.html
๋ค์๊ณผ prefix=ng-table/
๊ฐ์ฐ ng-table
ํ๋ฆฌํฝ์ค ์ด๋ฆ์ ํด๋น ngtemplate- ๋ก๋๋ ๊ทธ๊ฒ์ ์ปดํ์ผํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ Angular์ ํ
ํ๋ฆฟ ์บ์์ ng-table/pager.html
ํ
ํ๋ฆฟ์ด ๋ฏธ๋ฆฌ ๋ก๋๋๋ฏ๋ก ng-table ์ฝ๋๊ฐ ng-table/pager.html
ํ
ํ๋ฆฟ์ ์์ฒญํ๋ฉด Angular๊ฐ ์ด๋ฅผ ์ฐพ์ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Webpack 2.2์์ ngTable์ ์ฌ์ฉํ ๋ ์ผ๋ถ ๋๋ฝ๋ html ํ ํ๋ฆฟ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. /bundles ๋๋ ํ ๋ฆฌ์์ ngTable ๋ชจ๋์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ํ์ฌ๋ก์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๊น์ต๋๋ค.