Giter VIP home page Giter VIP logo

easywebpack's People

Contributors

asins avatar cyberhan123 avatar hubcarl avatar jacksky007 avatar mice33 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

easywebpack's Issues

无法使用watch选项?

重现步骤:

  1. 使用 easy init 初始化项目,选择 create Nunjucks + HTML project boilerplate 类型
  2. 在webpack.config.js中添加watch: true节点
  3. 运行编译 npm run build

结果,报 TypeError 错误

D:\lab\easywebpack\01\node_modules\webpack-tool\lib\tool.js:115
    compiler.plugin('done', compilation => {
             ^

TypeError: compiler.plugin is not a function
    at WebpackTool.build (D:\lab\easywebpack\01\node_modules\webpack-tool\lib\to
ol.js:115:14)
    at Object.exports.build (D:\lab\easywebpack\01\node_modules\easywebpack\inde
x.js:47:28)
    at build (D:\lab\easywebpack\01\node_modules\easywebpack-cli\lib\builder.js:
87:13)
    at Object.exports.build (D:\lab\easywebpack\01\node_modules\easywebpack-cli\
lib\builder.js:100:10)
    at Command.program.command.description.action.env (D:\lab\easywebpack\01\nod
e_modules\easywebpack-cli\bin\cli.js:108:13)
    at Command.listener (D:\lab\easywebpack\01\node_modules\commander\index.js:3
15:8)
    at emitTwo (events.js:126:13)
    at Command.emit (events.js:214:7)
    at Command.parseArgs (D:\lab\easywebpack\01\node_modules\commander\index.js:

[RFC] extract-text-webpack-plugin 不再支持 Webpack 4.3.0

问题描述

目前 extract-text-webpack-plugin 最新版本不支持 Webpack 4.3.0 版本. Webpack 4.2.0 一下可用。
目前从 extract-text-webpack-plugin issues 了解, 未来 extract-text-webpack-plugin 将废弃,作者建议使用 mini-css-extract-plugin
easywebpack 工程化方案近期会适配。

现状

easywebpack 4 依赖的 webpack(webpack-tool) 目前已锁定 Webpack 4.2.0 版本

新的 css extract 方案

期望实现

  • 使用新的 css extract 方案
  • webpack-tool 不再锁定 Webpack 4.2.0 版本

多项目开发时, 端口占用问题

image
我先开一个项目按默认端口配置,再开一个项目按上图配置后页面请求资源(js等)时请求失败,node项目控制台报错:ERROR 8480 [xxxx] nodejs.ECONNREFUSEDError: connect ECONNREFUSED 127.0.0.1:9000。

使用typescript来进行前端开发构建的时候报错找不到js文件

nodejs.Error: read webpack memory file[/Users/xxx/Documents/xxx/chasing_the_wind/app/view/index.js] content is empty, please check if the file exists at /Users/xxx/Documents/xxx/chasing_the_wind/node_modules/egg-webpack-react/app.js:20:17 at Generator.next (<anonymous>) at onFulfilled (/Users/chuans/Documents/chuans/chasing_the_wind/node_modules/co/index.js:65:19) at <anonymous> at process._tickCallback (internal/process/next_tick.js:188:7)
这个是目前报错的信息,但是我如果吧tsx的后缀改成js或者jsx 一切正常,请问下 这个是什么问题呢

egg项目热更新问题求助

项目情况:
用easywebpack将web目录(模板、前端资源的源文件)的源文件编译生成egg需要的view、public。
image

问题: egg本地启动(npm run dev)时用egg-webpack通知了easywebpack编译成功,但easywebpack是内存编译,不落地磁盘,导致egg渲染找不到模板文件、静态资源文件

Webpack 4 upgrade task list

  • webpack-tool 依赖的 Webpack 升级 webpack4
  • 插件 webpack-manifest-resource-plugin 支持 webpack4
  • 插件 vue-ssr-dynamic-chunk-plugin 支持 webpack4
  • easywebpack config 合并改造,采用数组push,然后合并
  • easywebpack 移除历史兼容代码
  • easywebpack 和 egg-webpack publicPath proxy 改造, 静态资源与项目同域访问
  • easywebpack 升级 eslint-loader: 2.0.0
  • easywebpack 升级 file-loader:1.1.10
  • easywebpack-vue 升级 vue-loader: 14.1.1
  • easywebpack 升级 extract-text-webpack-plugin: 4.0.0-alpha.0
  • webpack-hot-middleware 插件hack支持 webpack4
  • commonsChunk 改造支持 splitChunks 和 runtimeChunk
  • 解决热更新无效, module.hot 始终是 false 问题
  • service worker 相关插件改造和问题问题
  • easywebpack webpack4 单元测试
  • easywebpack-vue webpack4 单元测试
  • easywebpack-react webpack4 单元测试
  • easywebpack webpack4 支持 4.0.0 发布
  • easywebpack-vue webpack4 支持 4.0.0 发布
  • easywebpack-react webpack4 支持 4.0.0 发布
  • easywebpack-html webpack4 支持 4.0.0 发布
  • easywebpack-js webpack4 支持 4.0.0 发布
  • Vue Client Render 骨架升级
  • React Client Render 骨架升级
  • Egg + Vue SSR 骨架升级
  • Egg + React SSR 骨架升级
  • easywebpack-cli 升级
  • 相关项目升级

不能正常运行Element的表单自定义验证规则

复现步骤

  1. 创建一个 Vue Egg Server Single and Multiple Page Application
  2. 把 element.js 换成 element 官网文档中的 组件/Form/自定义校验规则的相关代码
    不能正常触发验证规则,报的错是 vue 中 data 中�的值(比如attr1) 不能使用 this.attr1 访问,只能通过 this.data.attr1 来访问。

新手问题,请多包涵。

[RFC] easywebpack 自动安装缺失依赖

问题描述

easywebpack 工程化方案 dependencies 内置常用的 loaderplugin,部分默认禁用的loaderplugin 是没有内置到 dependencies 里面,当开启时,需要用户手动安装依赖。

已支持情况

  • 显示配置, npm start 时,会自动检测安装,每次都会检查,导致时间较长,需要优化
install:{
   npm: 'npm', // 默认是 npm, 可以是 cnpm
   check: true // 默认为禁用,自动安装缺少的 loader 和 plugin,建议首次 运行成功后,改成 false,加快构建速度
  },

期望实现

  • 自动检测依赖,无需配置
  • 首次安装成功以后不再检测
  • 配置有变动,需要重新检测缺失插件

How can add additional scripts in Render function

How can i add additional scripts in easywebpack-vue-ssr Render function

I want to add an additional Js ( vconsole.js ) just for some specified users. So i want to add some string in ssr renderString. Is there an option just like vue-ssr renderToString function in easy-webpack-vue render function ? Thx.

add additional scripts in vue-ssr

   const renderer = vueSSR.createBundleRenderer(// ...);
   const html = await renderer.renderToString({
       links: `
           <script src="/dist/vconsole.min.js"></script>
           <script>
              var vConsole = new VConsole( );
            </script>
       `
    })

easy-webpack-vue-ssr

  async index() {
    await this.ctx.render('app/app.js', {
      url: this.ctx.url.replace(/\/app/, '')
      //  how can i add my additioanl scripts here
    });
  }

生产环境打包,script引入js的路径没有替换成绝对路径

'use strict';
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const optimizeCssAssets = require('optimize-css-assets-webpack-plugin');
const Oss = require('./plugins/oss');

module.exports = {
egg: true,
framework: 'vue',
entry: {
include: ['app/web/page'],
exclude: ['app/web/page/[a-z]+/(component|store)'],
loader: {
client: 'app/web/framework/vue/entry/client-loader.ts',
server: 'app/web/framework/vue/entry/server-loader.ts'
}
},
// publicPath: process.env.NODE_ENV === 'production' ? 'https://cdn.dooprime.com/clearing-website/dist/' : '/public/',
alias: {
server: 'app/web/framework/vue/entry/server.ts',
client: 'app/web/framework/vue/entry/client.ts',
component: 'app/web/component',
framework: 'app/web/framework',
},
dll: ['vue'],
loaders: {
typescript: true,
less: true,
stylus: true
},
plugins: {
vueLoader: {
name: new VueLoaderPlugin()
},
optimizeCssAssets: {
name: new optimizeCssAssets(),
env: ['prod']
}
}
};
image

global enviroment is undefined

What happened

These global enviroment is undefined

  • EASY_ENV_IS_DEV
  • EASY_ENV_IS_TEST
  • EASY_ENV_IS_PROD
// .vue
console.log( EASY_ENV_IS_DEV ) // undefined

version

  • egg 2.3.0
  • egg-cors 2.0.0
  • egg-webpack 3.3.2
  • egg-webpack-vue 2.0.1

下列全局变量为undefined

  • EASY_ENV_IS_DEV
  • EASY_ENV_IS_TEST
  • EASY_ENV_IS_PROD

exports.vuessr????where is exports.reactssr

是不是不支持reactssr的配置项啊,,,我在项目通过注释的写法
/* webpackChunkName: "show" */ 去异步引入组件 渲染是可以渲染 但是还是渲染到目录为enrty ssr.js�里面了,并没有chunk?????生成 我webpack.config.js 也配置了也不行。。。。

html-webpack-plugin配置问题

我需要改变html输出的目录
entry: 'app/web/**/*.js',
output: {
path: path.resolve(__dirname, 'app/public'),
publicPath: 'public',
},
plugins: {
html: {
minify: false,
filename: path.resolve('./app/view/[name].html')
},
},
配置后输出的文件名变成了0,1,2这种,我怎么用entry的js文件名作为html文件名(不更改l输出目录默认是用的entry的js文件名),就是[name]那个地方怎么取

打包时autoprefixer超多提示错误

在构建时现在会提示很多的警告信息

Replace Autoprefixer browsers option to Browserslist config.
  Use browserslist key in package.json or .browserslistrc file.

  Using browsers option cause some error. Browserslist config
  can be used for Babel, Autoprefixer, postcss-normalize and other tools.

  If you really need to use option, rename it to overrideBrowserslist.

  Learn more at:
  https://github.com/browserslist/browserslist#readme
  https://twitter.com/browserslist

问题在于easywebpack中config/postcss.config.js文件中需要将配置进行升级

 module.exports = {
  plugins: [
    require('autoprefixer')({ browsers: ['iOS >= 7', 'Android >= 4.0'] })
  ]
}

更新为:

module.exports = {
  plugins: [
    require('autoprefixer')({ overrideBrowserslist: ['iOS >= 7', 'Android >= 4.0'] })
  ]
}

运行一段时间后内存溢出的问题

前端vue的东西修改发生热更新,过一段时间之后报错如下。
看网上的方案是在dev的时候加上node --max_old_space_size=4096
但是只能延缓出现这个错误的时间。
暂时的解决方法就是重启dev。
感觉很繁琐,有没有更好的办法解决一下。
看了vue-cli生成的项目不会出现这个问题,所以是否可以借鉴下它的内部是如何运作热更新释放内存中的资源。

<--- Last few GCs --->

[9680:00000227BACCE0F0] 65343019 ms: Mark-sweep 4062.1 (4159.1)
-> 4062.1 (4159.6) MB, 387.6 / 0.0 ms  allocation failure GC in
old space requested
[9680:00000227BACCE0F0] 65343350 ms: Mark-sweep 4062.1 (4159.6)
-> 4062.0 (4126.6) MB, 330.4 / 0.0 ms  last resort GC in old space requested
[9680:00000227BACCE0F0] 65343678 ms: Mark-sweep 4062.0 (4126.6)
-> 4062.0 (4125.1) MB, 328.1 / 0.0 ms  last resort GC in old space requested


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 00000069B2A257C1 <JSObject>
    1: stringSlice(aka stringSlice) [buffer.js:560] [bytecode=000001C5AA852929 offset=94](this=0000000D73E022D1 <undefined>,buf=0000013E51013641 <Uint8Array map = 000001BB71136601>,encoding=00000069B2A34EB1 <String[4]: utf8>,start=0,end=500637)
    2: toString [buffer.js:633] [bytecode=000001C5AA852579 offset=145](this=0000013E51013641 <Uint8Array map = 000001BB71136601>,encoding=00000069B2A34...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript
heap out of memory
 1: node_module_register
 2: v8::internal::FatalProcessOutOfMemory
 3: v8::internal::FatalProcessOutOfMemory
 4: v8::internal::Factory::NewRawTwoByteString
 5: v8::internal::Factory::NewStringFromUtf8
 6: v8::String::NewFromUtf8
 7: v8_inspector::V8InspectorClient::currentTimeMS
 8: node::Buffer::New
 9: v8::internal::wasm::SignatureMap::Find
10: v8::internal::Builtins::CallableFor
11: v8::internal::Builtins::CallableFor
12: v8::internal::Builtins::CallableFor
13: 000003D3A46843C1

package.json

...
{
  "scripts": {
    ...
    "dev":  "npm run tsc:w && node --max_old_space_size=4096 index.js"
    ...
  }
  "dependencies": {
    "axios": "^0.18.0",
    "countup": "^1.8.2",
    "egg": "^2.7.1",
    "egg-cors": "^2.0.0",
    "egg-logger": "^1.6.2",
    "egg-scripts": "^2.6.0",
    "egg-validate": "^1.0.0",
    "egg-view-vue-ssr": "^3.0.8",
    "extend": "~3.0.1",
    "iview": "^2.13.1",
    "iview-area": "^1.5.17",
    "js-cookie": "^2.2.0",
    "jsbarcode": "^3.9.0",
    "lodash": "^4.17.5",
    "moment": "^2.22.1",
    "mysql": "^2.15.0",
    "reflect-metadata": "^0.1.12",
    "server-side-render-resource": "^1.0.3",
    "tinymce": "^4.7.11",
    "typeorm": "^0.2.1",
    "vue": "^2.5.16",
    "vue-hot-reload-api": "^2.3.0",
    "vue-router": "^3.0.1",
    "vue-server-renderer": "^2.5.16",
    "vue-virtual-scroller": "^0.11.7",
    "vuex": "^3.0.1",
    "vuex-router-sync": "^5.0.0"
  },
  "devDependencies": {
    "autod-egg": "^1.1.0",
    "autoprefixer": "^8.3.0",
    "babel-core": "^6.26.0",
    "babel-helper-vue-jsx-merge-props": "^2.0.3",
    "babel-loader": "^7.1.4",
    "babel-plugin-add-module-exports": "^0.2.1",
    "babel-plugin-jsx-v-model": "^2.0.3",
    "babel-plugin-syntax-dynamic-import": "^6.18.0",
    "babel-plugin-syntax-jsx": "^6.18.0",
    "babel-plugin-transform-object-assign": "^6.22.0",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-plugin-transform-vue-jsx": "^3.7.0",
    "babel-preset-env": "^1.6.1",
    "canvas": "^1.6.10",
    "cross-env": "^5.1.4",
    "cz-conventional-changelog": "^2.1.0",
    "directory-named-webpack-plugin": "^2.3.0",
    "easywebpack-cli": "^3.11.1",
    "easywebpack-vue": "^4.0.4",
    "egg-logview": "^2.0.0",
    "egg-webpack": "^4.1.1",
    "egg-webpack-vue": "^2.0.1",
    "eslint": "^4.19.1",
    "eslint-config-standard": "^11.0.0",
    "eslint-loader": "^2.0.0",
    "eslint-plugin-import": "^2.11.0",
    "eslint-plugin-node": "^6.0.1",
    "eslint-plugin-promise": "^3.7.0",
    "eslint-plugin-standard": "^3.0.1",
    "eslint-plugin-vue": "^2.1.0",
    "imagemin-webpack-plugin": "^2.1.1",
    "ip": "^1.1.5",
    "postcss-loader": "^2.1.4",
    "progress-bar-webpack-plugin": "^1.11.0",
    "pug": "^2.0.3",
    "stylus": "^0.54.5",
    "stylus-loader": "^3.0.2",
    "ts-loader": "^4.2.0",
    "tslint": "^5.9.1",
    "tslint-loader": "^3.6.0",
    "typescript": "^2.8.3",
    "uglifyjs-webpack-plugin": "^1.2.5",
    "vconsole": "^3.2.0",
    "vue-template-compiler": "^2.5.16",
    "webpack-manifest-resource-plugin": "^4.2.3"
  }
  ...
}

1.0.5 在 windows 下 crash

https://github.com/hubcarl/easywebpack/blob/master/utils/utils.js#L88

在我电脑上,这里 path.posix.join 返回结果为
temp/cache.json

对应 path.win32.join 返回结果为
D:\codes\egg-vue-webpack-boilerplate\node_modules\easywebpack-vue\node_modules\easywebpack\temp\cache.json

上面那个会导致找不到 module

就像我之前提的 pr 一样,一开始也是把 path 换成 path.posix,马上发现没这么简单。
win32 下我遇到的主要问题在于 entry 的路径,参见 https://github.com/jacksky007/easywebpack/blob/master/utils/utils.js#L53

你好,easywebpack 支持多个公用文件打包么

我试着用webpack4的 splitChunks及 easywebpack的 pack 以及 dll都实现不了
例子是 egg-vue-webpack-boilerplate element.vue中把element-ui 单独打包成公用elementUi.js 使得router.vue 和 element.vue可以复用

easywebpack-vue开发环境中怎么访问静态资源

easywebpack-vue开发环境(npm run dev)中怎么打开静态资源,比如我上传了一个文件保存到/public目录下和app/public下都无法打开;但是在(npm run start)中就可以打开。需要在哪个文件设置?

html-webpack-pluging的配置求助

html: {
minify: false,
template: path.resolve(__dirname, 'app/web/page/[entryName]/[entryName].js')
},

多页面怎么自定义template,就是entryName那个地方怎么才能拿到入口文件的名称(在配置文件中)

service-worker

你好,我的项目中没有开启service-worker 但是 还是会有
http://localhost:7001/service-worker.8ddbbade.js 这样的请求出现,是什么原因呢?

webpack.config.js
 plugins: {
    serviceworker: false
  },

plugin.local.js
exports.webpack = {
  enable: true,
  package: 'egg-webpack'
};

exports.webpackvue = {
  enable: true,
  package: 'egg-webpack-vue'
};

Node 10.13下打包会报错

node_modules/easywebpack-vue/node_modules/easywebpack/index.js:13

exports.getConfig = config => require('./lib/config')(config);
^
TypeError: Class constructor Config cannot be invoked without 'new'

配置publicPath后报错

webpack.config.js
{ egg: true, framework: 'vue', publicPath: 'http://xxx.cdn.com/public/', ... }

报错:
`yarn build
yarn run v1.9.4
$ easywebpack build prod
clean-webpack-plugin: /Users/xxx/public has been removed.
webpack build [========== ] 10% (0.0 seconds){ parser: "babylon" } is deprecated; we now treat it as { parser: "babel" }.
webpack build [====================================================================================================] 100% (15.8 seconds)

Build completed in 15.771s

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.`

打包出来的mainfest.json
{ "app.css": "http://xxx.cdn.com/public/css/app.c2131bfb.css", "app.js": "http://xxx.cdn.com/public/js/chunk/app.3024194f.js", "runtime.js": "http://xxx.cdn.com/public/js/runtime.cdf3621f.js", "font/iconfont.css": "http://xxx.cdn.com/public/font/iconfont.ba9be85f.woff", "img/default-avatar.png": "http://xxx.cdn.com/public/img/default-avatar.bf66d842.png", "img/user-menu.vue": "http://xxx.cdn.com/public/img/icon-yixinli.61229039.png", "img/iconfont.css": "http://xxx.cdn.com/public/img/iconfont.d2a86037.svg", "img/list.vue": "http://xxx.cdn.com/public/img/no-artical.19d06407.png", "img/theme-entry.png": "http://xxx.cdn.com/public/img/theme-entry.619bb2b3.png", "vendor.js": "/public/js/vendor.1d4da928.js", "deps": { "app.js": { "js": [ "/public/js/vendor.1d4da928.js", "http://xxx.cdn.com/public/js/runtime.cdf3621f.js", "http://xxx.cdn.com/public/js/chunk/app.3024194f.js" ], "css": [ "http://xxx.cdn.com/public/css/app.c2131bfb.css" ] } }, "info": { "publicPath": "http://xxx.cdn.com/public/", "buildPath": "public", "mapped": true } }

报错后文件根目录public文件夹丢失。
cdn配置项也是如此

webpack.config.js自定义的loader 最终会用2次

return merge(baseConfig, fileConfig, config);

这个地方的merge最终会导致webpack.config.js定义的Loader加两次

例如webpack.config.js配置:

  // webpack.config.js
  loaders: {
    html: {
      test: /\.html$/,
      use: [
        {
          loader: 'html-loader',
          options: {
            interpolate: 'require', // supported html `${}` sytax
            attrs: [ ':src' ],
          },
        },
      ],
    },
 }

最终的结果:

2018-10-15 3 30 34

使用image-webpack-loader替代imagemin-webpack-plugin

https://github.com/hubcarl/easywebpack/blob/2dcd953fc93d21d3aada028250c598b5729207e3/config/plugin.js#L205

小图片我们会使用url-loader让它直接base64,但有一些图片压缩前很大,imagemin之后很小,这些文件如果用imagemin-webpack-plugin它不会base64,因为loader在plugin之前执行,url-loader limit比较的是压缩前的大小,发布出去发现有很多小图片

可以这样:

    urlimage: {
      use: [
        {
          loader: 'url-loader',
          options: {
            limit: 1024 * 5,
            fallback: 'file-loader',
            // img output path
            name: `img/[name].[hash:8].[ext]`,
          },
        },
        {
          loader: 'image-webpack-loader',
        },
      ],
    },

easywebpack feature list

supported

no label version , both webpack2 and webpack3 support

plan support

  • typescript
  • image sprites
  • egg + element full project
  • egg + ant design full project

多页面项目中有些页面的生成我希望当模板来使用不需要inject js/css,html-webpack-pluging怎么配置?

plugins: [
{
html: false
},
{
env: 'prod',
name: new CleanWebpackPlugin('app/view')
},
new HtmlWebpackPlugin({template, filename, minify, hash, inject, chunks}),
new HtmlWebpackPlugin({template, filename, minify, hash, inject, chunks}),
new HtmlWebpackPlugin({template, filename, minify, hash, inject, chunks})
]
类似这样我把easywebpack的增强配置html禁用掉,配上原生的HtmlWebpackPlugin,就只会生成最后一条配置的html,前面两个就没生成出html文件

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.