gpt4 book ai didi

angular - Webpack2 Angular2 ng-bootstrap 摇树

转载 作者:太空狗 更新时间:2023-10-29 17:52:11 37 4
gpt4 key购买 nike

我目前正在使用 https://github.com/ng-bootstrap/ng-bootstrap在我的 angular2 应用程序中并使用 webpack2 构建所有 ts 文件。

我现在只使用 NgbModule 的模态组件,但在缩小的文件中我仍然可以看到 NbgAccordian 和我的应用程序中未使用的其他模块引用

@ng-bootstrap/ng-bootstrap": "^1.0.0-alpha.15

我尝试了 import { NgbModule, NgbModal, NgbModalOptions, ModalDismissReasons, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; 但也没有按预期工作。这与 tree shaking 或 Ngbmodule 的编写方式有关吗?从 vendor.js 文件中省略未使用的模块的任何选项

供应商.ts

// Angular

import '@angular/core';
import '@angular/common';
import '@angular/forms';
import '@angular/http';
import '@angular/platform-browser';
import '@angular/platform-browser-dynamic';
import '@angular/router';


// RxJS
import 'rxjs';
// Other vendors for example jQuery, Lodash or Bootstrap
// You can import js, ts, css, sass, ...

import '@ng-bootstrap/ng-bootstrap';
import 'moment/moment';
import 'angular2-toaster/angular2-toaster';
import 'angular2-moment';
import 'ng2-tag-input';

import 'ng2-img-cropper';

webpack.prod.js

var webpack = require('webpack');
var webpackMerge = require('webpack-merge');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
var commonConfig = require('./webpack.common.js');
var CompressionPlugin = require("compression-webpack-plugin");
var helpers = require('./helpers');

var packageJson = require('../../package.json');
var version = packageJson.version;
const ENV = process.env.NODE_ENV = process.env.ENV = 'production';
var drop_console = true;

//https://github.com/mishoo/UglifyJS2#mangle
//https://github.com/mishoo/UglifyJS2#compressor-options
https://github.com/mishoo/UglifyJS2
module.exports = webpackMerge(commonConfig, {
devtool: "source-map",
plugins: [
new webpack.LoaderOptionsPlugin({

minimize: true,
debug: false,
options: {

/**
* Html loader advanced options
*
* See: https://github.com/webpack/html-loader#advanced-options
*/
// TODO: Need to workaround Angular 2's html syntax => #id [bind] (event) *ngFor
htmlLoader: {
minimize: true,
removeAttributeQuotes: false,
caseSensitive: true,
customAttrSurround: [
[/#/, /(?:)/],
[/\*/, /(?:)/],
[/\[?\(?/, /(?:)/]
],
customAttrAssign: [/\)?\]?=/]
}

}
}),
new webpack.NoErrorsPlugin(),
new webpack.optimize.UglifyJsPlugin({ // https://github.com/angular/angular/issues/10618
minimize: true,
sourceMap: true,

// Don't beautify output (enable for neater output)
beautify: false,

// Eliminate comments
comments: false,



mangle: {
toplevel : true,
screw_ie8: true,
keep_fnames: false
},
compress: {
screw_ie8: true,

dead_code : true,

unused : true,

warnings: false,

// Drop `console` statements
drop_console: drop_console
}

}),
new CompressionPlugin({
regExp: /\.css$|\.html$|\.js$|\.woff$|\.map$/,
algorithm: "gzip",
threshold: 2 * 1024,
minRatio: 0.8
}),
new webpack.DefinePlugin({
'process.env': {
'ENV': JSON.stringify(ENV)
}
})
]
});

---------------------------- 2017 年 4 月 20 日更新 ------ --------------

必须更新我的模块和组件文件以导入文件的深度链接引用而不是根目录以从 ng bootstrap 中排除未使用的模块

应用程序模块.ts

import {  NgbModalModule }                            from '@ng-bootstrap/ng-bootstrap/modal/modal.module';
import { NgbTooltipModule} from '@ng-bootstrap/ng-bootstrap/tooltip/tooltip.module';
import { NgbAlertModule } from '@ng-bootstrap/ng-bootstrap/alert/alert.module';

应用程序组件.ts

import {NgbModal, NgbModalOptions} from '@ng-bootstrap/ng-bootstrap/modal/modal';
import { ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap/modal/modal-dismiss-reasons';
import { NgbActiveModal} from '@ng-bootstrap/ng-bootstrap/modal/modal-ref';
import { NgbTooltipConfig } from "@ng-bootstrap/ng-bootstrap/tooltip/tooltip-config";

供应商.ts

import { NgbModalModule, NgbModal, NgbModalOptions, ModalDismissReasons, NgbActiveModal, NgbTooltipModule, NgbTooltipConfig, NgbAlertModule } from '@ng-bootstrap/ng-bootstrap';

-------- 进一步更新------------

遵循 tree shaking 配置来自

https://github.com/Andrey-Pavlov/angular2-webpack-starter/blob/d0a225851e6d63b03a21ad6b7a71552a941229ef/config/webpack.common.js#L220

alt text

最佳答案

tl;博士;是您只能从 ng-bootstrap 中挑选您使用的组件但您只需要导入您正在使用的内容。

如果您只是使用 ng-bootstrap 中的单个模块项目比你应该只导入使用的模块(而不是像你今天做的整个 NgbModule)。方法如下(以模态为例):

import {NgbModalModule} from '@ng-bootstrap/ng-bootstrap';

...

@NgModule({
declarations: [AppComponent, ...],
imports: [NgbModalModule.forRoot(), ...],
bootstrap: [AppComponent]
})
export class AppModule {
}

最后这里是 plunker 中的一个实例:http://plnkr.co/edit/3TdcMzPBXb3OKWYIQisG?p=preview

此外,当使用 WebPack 时,请确保只导入它在 vendor.ts 文件中使用的内容(如 import '@ng-bootstrap/ng-bootstrap'; 将带来所有组件);

关于angular - Webpack2 Angular2 ng-bootstrap 摇树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429897/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com