{"id":14976352,"url":"https://github.com/sayll/ie-webpack-start","last_synced_at":"2025-10-27T20:30:54.663Z","repository":{"id":91747188,"uuid":"84281121","full_name":"sayll/ie-webpack-start","owner":"sayll","description":"webpack2编译打包支持到低版本IE。坑有多少？水有多深？自行体会！","archived":false,"fork":false,"pushed_at":"2017-12-17T14:18:33.000Z","size":174,"stargazers_count":134,"open_issues_count":1,"forks_count":20,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-01T08:02:05.318Z","etag":null,"topics":["ie","webpack","webpack2"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sayll.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-08T05:12:56.000Z","updated_at":"2024-10-24T15:25:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"5be15cea-fee6-49da-9c7b-3f358dc09b05","html_url":"https://github.com/sayll/ie-webpack-start","commit_stats":{"total_commits":24,"total_committers":3,"mean_commits":8.0,"dds":"0.45833333333333337","last_synced_commit":"c04838983c11b744f2aa84e152d8bf12df13bfad"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sayll%2Fie-webpack-start","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sayll%2Fie-webpack-start/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sayll%2Fie-webpack-start/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sayll%2Fie-webpack-start/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sayll","download_url":"https://codeload.github.com/sayll/ie-webpack-start/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238552969,"owners_count":19491351,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ie","webpack","webpack2"],"created_at":"2024-09-24T13:53:45.940Z","updated_at":"2025-10-27T20:30:54.302Z","avatar_url":"https://github.com/sayll.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ie-webpack-start\n[![Coverage Status](https://travis-ci.org/sayll/ie-webpack-start.svg?branch=master)](https://travis-ci.org/sayll/ie-webpack-start)  [![Coverage Status](https://coveralls.io/repos/github/sayll/ie-webpack-start/badge.svg)](https://coveralls.io/github/sayll/ie-webpack-start) [![Coverage Status](https://codeclimate.com/github/sayll/ie-webpack-start/badges/gpa.svg)](https://codeclimate.com/github/sayll/ie-webpack-start)\n\n\u003cb\u003eVue 用户请转至：[vue-start](https://github.com/sayll/vue-start)\u003c/b\u003e\n\n\u003cb\u003eReact 用户请转至：[react-webpack-start](https://github.com/sayll/react-webpack-start)\u003c/b\u003e\n\n\u003cb\u003eIE 9+ 用户请转至：[avalon-webpack-start](https://github.com/sayll/avalon-webpack-start)\u003c/b\u003e\n\n## 重要\n\n\u003cb\u003e由于webpack不支持低版本IE下启动服务实时测试，必须通过打包才知道测试结果。\u003c/b\u003e \u003c/br\u003e\n所以请用户自行在其他浏览器编写测试，最后回跑测试打包的IE\u003c/br\u003e\n代码压缩导致无法兼容低版本IE,故取消代码压缩功能。\u003c/br\u003e\n如有使用如Jquery第三方库的同学，最好自行引用它的min版本，而不是通过打包形式。（否则：反而使包变大）\u003c/br\u003e\n本项目只是为用户提供使用ES6新特性的可能，和简单方便的管理资源。其他扩展功能不在本项目的范围内。\u003c/br\u003e\n\n## 目录简介\n1. [介绍](#介绍) \n2. [程序目录](#程序目录)\n3. [项目启动](#项目启动)\n    * [环境配置](#环境配置)\n    * [依赖配置](#依赖配置)\n    * [命令说明](#命令说明)\n4. [使用手册](#使用手册)\n    * [基本](#基本)\n      * [创建HTML视图](#创建视图)\n      * [配置JS,CSS资源文件](#配置资源文件)\n      * [静态资源](#静态资源)\n    * [高级](#高级)\n      * [使用框架(avalon2)或库(jquery)](#使用框架)\n      * [引用字体图标Icon](#配置Icon)\n      * [使用CSS预处理器、CDN或开启多文件路口main.js](#使用CSS预处理器)\n      * [修改目录结构](#修改目录结构)\n      * [单元测试](/docs/Tests.md)\n    * [发布](#发布)  \n5. [常见问题](/docs/Issue.md)\n6. [更新日志](#更新日志)\n7. [最重要的事情](#最重要的事情)\n\n## 介绍\n这个一个以webpack2为基础，启用tree-shaking新技术,为打包支持到低版本的`webpack2`实验性脚手架。\u003c/br\u003e\n本项目使用[`avalon2`](https://github.com/RubyLouvre/avalon)作为演示框架。\u003c/br\u003e\n\n### 关于【Webpack】\n1. 服务端使用Express。需要注意的是，只有一个目的那就是提供了`webpack-dev-middleware` 和 `webpack-hot-middleware`（代码热替换）。使用自定义的Express程序替换[webpack-dev-server](https://github.com/webpack/webpack-dev-server)，让它更容易实现universal 渲染和为了不使这个包过于庞大。\n2. 针对不同的loader采用了多线程编译，极大的加快了编译速度。\n3. 可用ES6编译低版本IE代码【水有多深不得而知】\n4. 启动新技术tree-shaking\n5. 提供测试框架进行单元测试，代码覆盖率报告，可与[Travis-ci](https://travis-ci.org)和[Coveralls](https://coveralls.io)快速对接。【[配置说明](https://github.com/sayll/Sayll_Karma)】\n6. Babel被配置[babel-plugin-transform-runtime](https://www.npmjs.com/package/babel-plugin-transform-runtime)可以让代码更优化。\n\n### 关于【HTML】\n1. 支持单页应用和多页应用的混合开发。\n2. 自动引入页面的CSS和JS文件。无需手动设置URL。(所有文件hash的改变都会导致文件名改变,这里的资源引用全由内部自动完成)\n\n### 关于【CSS】\n1. css的模块化，预处理器的编译。（[支持`sass,scss,less,postcss`](#使用CSS预处理器)）\n2. 针对低版本浏览器和其他浏览器内核的特殊性，启用[autoprefixer](https://github.com/postcss/autoprefixer)自动添加浏览器前缀\n3. 可导入字体和字体图标，操作非常简单。（如[阿里系icon](http://www.iconfont.cn/)）【[配置文档](#高级)】\n4. 防缓存的hash规则\n\n### 关于【JS】\n1. 支持ES5,ES6编写逻辑代码\n2. 由于兼容性问题只可使用AMD规范的`require`,无法使用 `import` 和 `export`\n3. 防缓存的hash规则\n4. 快速编译，自动刷新。\n\n## 程序目录\n\n```\n├── build                    # 所有打包配置项\n├── config                   # 项目配置文件\n│   ├── webpack              # webpack配置文件夹\n│   └── karma.conf.js        # karma配置文件\n├── server                   # Express 程序 (使用 webpack 中间件)\n│   └── main.js              # 服务端程序入口文件\n├── static                   # 静态资源文件夹，将它视为项目根使用\n|\n├── app                      # 程序源文件\n│   ├── html                 # 多页或单页应用的入口HTML\n│   └──  source               # 公共的资源文件\n│   ├    ├── css\n│   ├    ├── js\n│   ├    ├── font\n│   ├    └── img             \n│   ├── utils                # 辅助资源(所有内部文件通过index.js引入，可配置全局变量。)\n│   └── view                 # 主路由和异步分割点\n│       └── index            # 匹配html文件夹中的index.html。（css,js文件名对应文件夹名，可直接打包无需单独引入）\n│           ├── index.js     # 直接与index.html匹配的入口文件，可以作为单页应用的入口，在内部定义自己的项目目录\n│           ├── index.css    # 如是多页应用，可设置对应的CSS文件，直接匹配。\n│           └── other **     # 页面的其他资源文件，通过index.js引入\n└── tests                    # 单元测试\n```\n\n## 项目启动\n\n### 环境配置\n* 为了把保证项目正常运行，请自行更新相关环境。 \n1. 安装[node.js](https://nodejs.org/)\n2. 安装[git](https://git-scm.com/)\n3. 安装[Yarn](https://yarnpkg.com/zh-Hans/)（可选）\n\n### 依赖配置\n1. 首先clone项目\n```bash\n$ git clone https://github.com/sayll/ie-webpack-start.git\n$ cd ie-webpack-start\n```\n* 由于国内有一堵高墙的存在建议国内用户切换源地址：\n```bash\n$ npm run cnpm\n```\n以后请使用`cnpm`替代`npm`操作\n\n2. 下载依赖\n* 请确保你的环境配置完成，然后就可以开始以下步骤\n  * `npm` 用户：\n  ```bash\n  $ npm install                   # Install project dependencies\n  $ npm start                     # Compile and launch\n  ```\n  * `cnpm` 用户：\n  ```bash\n  $ cnpm install                   # Install project dependencies\n  $ npm start                     # Compile and launch\n  ```\n  * `Yarn` 用户：\n  ```bash\n  $ yarn                          # Install project dependencies\n  $ yarn start                    # Compile and launch\n  ```\n如果一切顺利,就能正常打开端口:[http://localhost:3000/](http://localhost:3000/)\n\n### 命令说明\n\n开发过程中，你用得最多的会是`npm start`，但是这里还有很多其它的处理：\n\n|`npm run \u003cscript\u003e`|解释|\n|------------------|-----------|\n|`start`|启动3000端口服务，代码热替换开启。|\n|`build`|单纯打包资源，不会进行代码测试。|\n|`deploy`|删除旧文件，进行代码测试，打包相关文件（默认目录~/build）。|\n|`test`|开启Karma测试并生成覆盖率报告。(默认关闭：[启动配置](/docs/Tests.md))|\n|`visualizer`|打包资源分析|\n|`clean`|清除打包的文件|\n|`cnpm`|替换为淘宝镜像|\n* 开发使用 `start`\n* 调试IE使用 `build`\n* 发布使用`deploy`\n\n## 使用手册\n\n### 基本\n\n1. \u003ca name='创建视图'\u003e创建HTML视图\u003c/a\u003e,文件地址：[`app/html`](/app/html)\n    * 创建单页应用，只需一个入口文件`index.html`即可。\n2. \u003ca name='配置资源文件'\u003e配置JS,CSS资源文件\u003c/a\u003e，文件地址：[`app/view`](/app/view)\n\n    一. 创建html文件`app/html/demo.html`时，配置view中的资源文件：\n    \n    * `app/view/demo/demo.js`\n    * `app/view/demo/demo.css`\n    \n    二. 创建html文件`app/html/test/index.html`时，配置view中的资源文件：\n    \n    * `app/view/test/index/index.js`\n    * `app/view/test/index/index.css`\n    \n    三. 创建单页应用`app/html/index.html`时，配置view中的资源文件：\n    \n    * `app/view/index/index.js`\n    * `app/view/index/index.css`\n    * 在`app/view/index`中管理其他资源文件，通过唯一的文件入口`index.js`来引入其他资源文件\n3. \u003ca name='静态资源'\u003e静态资源\u003c/a\u003e\n     1. 如需直接引用静态资源文件，可在static文件夹中添加文件，将static视为项目根文件。\n        * 如引用`ico`,通过 `\u003clink type=\"image/x-icon\" href=\"logo.ico\" rel=\"shortcut icon\"/\u003e`即可\n\n### 高级\n\n1. \u003ca name='使用框架'\u003e使用框架(avalon2)或库(jquery)\u003c/a\u003e\n  * 首先安装依赖 或 寻找兼容IE版本的库文件\n  ```bash\n  $ npm install avalon2\n  ```\n  \n  * 配置全局调用变量，地址：[`app/utils/index.js`](/app/utils/index.js)\n  ```js\n  // 由于avalon2内部自己解决绑定window对象，所以无需其他处理，直接引入即可。\n  window.$ = require('./tools/jquery.min');\n  require('avalon2');\n  ```\n注意：引包只能通过`require`形式,否则无法正常打包;（兼容低版本IE做出的牺牲之一）\n\n2. \u003ca name='配置Icon'\u003e引用字体图标Icon\u003c/a\u003e\n  * 引入字体文件\n  文件地址：[app/source/css/index.css](/app/source/css/index.css) \u003cbr /\u003e\n    * 添加字段： `@import \"../font/icon/iconfont.css`\n\n  * 构建自己的icon文件\n    * 构建自己的Icon文件：[http://www.iconfont.cn/](http://www.iconfont.cn/)\n  \n  * 替换文件地址：[app/source/font/icon](/app/source/font/icon)\n    * 直接将构建好的文件，替换原先旧文件即可\n3. \u003ca name='使用CSS预处理器'\u003e使用**CSS预处理器**、**CDN**或开启多文件路口**main.js**\u003c/a\u003e\n  * 修改配置文件\n  文件地址：[config/webpack/base/base.js](/config/webpack/base/base.js)\n    * CSS预处理器修改项： `cssType`\n    \n      * 使用`less`下载依赖\n        ```bash\n        $ npm install less-loader less        # npm用户\n        $ cnpm install less-loader less       # cnpm用户\n        $ yarn add less-loader less           # yarn用户\n        ```\n        \n      * 使用`sass|scss`下载依赖\n        ```bash\n        $ npm install sass-loader node-sass       # npm用户(由于墙的原因会有很大一部分人会失败，推荐使用cnpm)\n        $ cnpm install sass-loader node-sass      # cnpm用户\n        $ yarn add sass-loader node-sass      # yarn用户\n        ```\n        \n      * 样式文件后缀需要与`cssType`对应;\n         * 如使用`less`，请将`app`内部所有的样式文件后缀修改为`.less`\n        \n    * CDN修改项： `cdnPath`\n    * main.js修改项: `mainJS`  \n      * 文件地址：[app/source/js/main.js](/app/source/font/icon)\n    ```js\n    module.exports = {\n      mainJS  : true, // 添加公共main.js\n      devHost : '0.0.0.0',\n      devPort : '3000',\n      viewType: 'html', // pug,jade,html...\n      cssType : 'css', // sass,scss,less,pcss,css...\n      cdnPath : './', // 资源指向位置,可寄放CDN\n    };\n    ```\n    \n4. \u003ca name='修改目录结构'\u003e修改目录结构\u003c/a\u003e\n  * 文件地址: [`config/webpack/base/files.js`](/config/webpack/base/files.js)\n    *  此文件使webpack正确索引资源文件，如需调整资源目录，请使目录资源与`files.js`中的配置一一对应。\n          具体请查看源码\n5. 单元测试([更多说明](/docs/Tests.md))\n\n### 发布\n1. 打包命令\n```bash\n$ npm run build\n```\n或\n```bash\n$ npm run deploy\n```\n* 二者区别\n  * `build` 无测试，速度最快，安全系数较低。\n  * `deploy` 当单元测试功能开启时，`deploy`将添加一个检测项。只有所有测试通过时，才能正常打包。速度慢，安全系数最高。（默认关闭，开启请参考：[启动配置](/docs/Tests.md)）\n2. 打包文件为`build`文件夹，请以此为根目录。\n\n## 常见问题\n\n[常见问题](/docs/Issue.md)\n\n## 更新日志\n\n[更新详情](/docs/Update.md)\n\n## 最重要的事情\n\n* 亲不要吝啬自己的**Star**，右上角**Star**一下呗。\n\n\u003ca href=\"https://segmentfault.com/a/1190000008249713\"\u003e\u003cimg src='https://gss0.baidu.com/9vo3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D600%2C800/sign=405cc666d543ad4ba67b4ec6b2327697/d058ccbf6c81800a80b7b2cdb53533fa838b47a6.jpg' height='160'\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsayll%2Fie-webpack-start","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsayll%2Fie-webpack-start","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsayll%2Fie-webpack-start/lists"}