- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我刚刚使用 Angular 2(版本 rc.2)应用程序(使用 Typescript)更新到 webpack 2.1.0-beta.15,但我想知道如何使用 tree shaking 功能。我读到它应该“开箱即用”,但我仍然有一个 1.7Mb 的包用于一个非常简单的应用程序,所以可能我做错了什么。
这是我目前所拥有的:
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
包.json
{
"name": "angular2-quickstart",
"version": "1.0.0",
"scripts": {
"build": "webpack --progress",
"build:prod": "webpack -p --progress --optimize-minimize",
"postinstall": "typings install",
"serve": "webpack-dev-server --inline --progress --output-public-path=/dist/"
},
"license": "ISC",
"dependencies": {
"@angular/common": "2.0.0-rc.2",
"@angular/compiler": "2.0.0-rc.2",
"@angular/core": "2.0.0-rc.2",
"@angular/forms": "0.1.0",
"@angular/http": "2.0.0-rc.2",
"@angular/platform-browser": "2.0.0-rc.2",
"@angular/platform-browser-dynamic": "2.0.0-rc.2",
"@angular/router": "2.0.0-rc.2",
"@angular/router-deprecated": "2.0.0-rc.2",
"@angular/upgrade": "2.0.0-rc.2",
"angular-pipes": "1.4.0",
"bootstrap": "3.3.6",
"core-js": "2.4.0",
"file-loader": "0.9.0",
"jquery": "2.2.3",
"lodash": "4.13.1",
"reflect-metadata": "0.1.3",
"rxjs": "5.0.0-beta.6",
"script-loader": "0.7.0",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
"zone.js": "0.6.12"
},
"devDependencies": {
"concurrently": "^2.0.0",
"css-loader": "0.23.1",
"html-loader": "0.4.3",
"json-loader": "^0.5.4",
"raw-loader": "0.5.1",
"ts-loader": "0.8.2",
"typescript": "1.8.10",
"typings": "1.0.4",
"webpack": "^2.1.0-beta.15",
"webpack-dev-server": "^2.1.0-beta",
}
}
webpack.config.js
var webpack = require('webpack');
var PROD = JSON.parse(process.env.PROD_ENV || '0');
module.exports = {
entry: './app/main.ts',
output: {
path: './dist',
filename: 'app.bundle.js'
},
module: {
loaders: [
{ test: /\.json$/, loader: 'json', include: [/node_modules/] },
{ test: /\.ts$/, loader: 'ts' },
{ test: /\.html$/, loader: 'html' },
{ test: /\.css$/, loader: 'style!css' },
{ test: /\.(png|woff|woff2|eot|ttf|svg)$/, loader: 'url-loader?limit=100000' }
]
},
resolve: {
extensions: ['', '.js', '.ts', '.css']
},
'htmlLoader': {
caseSensitive: true
},
plugins: PROD ? [
new webpack.optimize.UglifyJsPlugin({
compress: { warnings: false }
})
] : []
}
我正在使用相当标准的导入语句,例如 import {FORM_DIRECTIVES,REACTIVE_FORM_DIRECTIVES} from '@angular/forms'
并尝试仅导入我需要的内容(import 'rxjs/add/operator/map';
) 并使用环境变量 PROD_ENV=1 的 npm run build:prod
运行构建。
也许像 jquery 或 lodash 这样的东西导致了问题(import * as $ from 'jquery'
或 import {orderBy} from 'lodash'
),但我相信两者相对较小。根据webpack visualizer , Jquery 和 Lodash 分别占 bundle 大小的 6.2% 和 12%。 Angular 使用了包大小的 49%。
我错过了什么?
最佳答案
对于 treeshaking 你必须使用 typescript 2
npm i typescript@next --save-dev
支持
tsconfig.json
{
"compilerOptions": {
"module": "es6",
"target": "es5"
}
}
这是因为 es6 模块是静态可分析的,Webpack 可以确定您的哪些依赖项被使用,哪些没有被使用。
关于angular - 如何在 Webpack 中使用 tree shaking?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38283985/
Shake 有 shakeVersion::String: Defaults to 1. The version number of your build rules. Change the vers
由于各种不幸的原因,我的部分构建需要 root 权限。我正在尝试使用 sudo为了这: cmd_ "sudo other_script.sh" [input] [output] 但是,大概是因为 Sh
我将 Xcode 更新到 9.0,现在 ⌘R 不再可以在 iOS 模拟器中重新加载应用程序,并且 ⌘D 不再打开开发者菜单。 开发者菜单的新快捷方式是 ^⌘Z,并且不再有重新加载应用程序的快捷方式。
我正在为我的应用程序开发简单的摇一摇功能,但我遇到了一个奇怪的问题。当我在我的 Honor5x 上测试它时,它就像一个魅力,但当我试图在三星 S5 上执行它时,它太敏感了。加速度计在不同设备上的工作方
我先找到example Shake 用法演示了一种似乎容易出错的模式: contents "txt" need contents cmd "tar -cf" [out] co
我正在使用 animate.css 实现 CSS3 摇动效果,CSS 看起来像下面的代码片段。现在它来回摇晃了好几次,我想把摇晃减半。有没有办法用 animate css3 来做到这一点,或者我需要修
我从 "Running" section of the Shake manual 创建了推荐的 build.sh 文件: #!/bin/sh mkdir -p _shake ghc --make Sh
我的应用程序上有一个可以由用户调整大小的控件,它有一些按钮固定在右上角,还有一个滚动条。 问题在于,当调整控件大小时,锚定在右侧的控件也会更改位置,并且仅在几毫秒后控件才进入正确位置。因此,看起来子控
我希望我的应用随时启动 Activity 以响应手机的“摇动”。 是否建议在后台持续运行一个服务来监听加速度计的变化? 有没有其他方法可以做到这一点? 有很多应用可以执行此类操作。 最佳答案 是的,使
我有一个构建两组目标的项目。一种是手持设备的各种版本的固件,最终为每个设备创建一个 .dfu 文件。这使用了 arm 编译链。另一组是为构建平台编译代码的相同设备的模拟器(嗯,通常无论如何)。我继承的
我有这样的规则: "foo" *> \out do need something create "foo" somehow 构建正确,运行构建两次不会构建目标。然后我向这条规则添加一个系统:
在 Puppet/Chef 的脉络中;我真的很想将 Shake 用于不仅仅是本地构建。我认为 Shake 的原理足够抽象(虽然我没有深入研究过),可以将其用作更大的配置构建工具的基础。 最佳答案 免责
我对规则感到困惑 Shake用于确定输出是否需要重建。我有一个简单的文档构建,包含两个步骤。完整的构建文件如下,但总而言之,asciidoc 用于将 .txt 文件转换为 .dbxml(Docbook
使用 jQuery UI 的抖动效果会导致元素跑到换行符处,抖动,然后跑回来。我尝试改变CSS的位置等,但没有破解它,我觉得有一个正常的,优雅的解决方案。 http://jsfiddle.net/Sh
在iPhone App中如何实现摇动手势? 请帮忙并提出建议。 谢谢 最佳答案 如果您的 ViewController 启用第一响应者 [self becomeFirstResponder] 并实现m
在 Shake 文档中,它建议使用标志 -with-rtsopts=-I0 进行编译。禁用空闲垃圾收集。为什么Shake建议这样做? 最佳答案 默认情况下(不带标志)如果所有 Haskell 线程空闲
我正在尝试了解如何使用 Shake 以及如何构建新规则。作为练习,我决定实现我称之为 backup 的规则。 我们的想法是在文件不存在或文件太旧(让我们超过 24 小时)时生成一个文件。我喜欢将长命令
我对测试库私有(private)类/函数的简单方法很感兴趣。下面有两个文件用于测试文件 curves_attribution.dart 中的代码。后者 (2) 是 http://pub.dartlan
我想摇动“#error_message”div。我正在做: $('#error_message').effect('shake', {times: 2, distance: 5}, 200); div
我正在尝试制作一个元素,它可以来回摇晃并变小,然后在单击时重置为其原始大小。问题是,当点击时,它似乎经历了尺寸循环,但在第一个之后,它就不再晃动了。如果尝试到处移动功能,但似乎没有任何效果。我的代码中
我是一名优秀的程序员,十分优秀!