gpt4 book ai didi

webpack - 控制 Webpack 3 捆绑/分块(在 Ionic3 中)

转载 作者:行者123 更新时间:2023-12-04 20:27:36 25 4
gpt4 key购买 nike

我在 node_modules 中有一堆东西,据我所知,它们都以 vendor.js 结尾。当我构建我的 Ionic3 项目时。为简单起见,假设我在 node_modules 中有以下文件夹:abc、xyz、uvw 和 qrs。让我们进一步说 abc 和 xyz 是公共(public)图书馆,但 uvw 和 qrs 是私有(private)图书馆。因此,我不想得到一个 vendor.js这包括所有四个库。相反,我想以 vendor.js 结束。包括 abc 和 xyz 以及 private.js包括uvw和qrs。

如何更改 Ionic3 项目中的配置文件以实现该结果?理想情况下,我只需要在配置中命名 uvw 和 qrs,并为 node_modules 中的“其他所有内容”生成 vendor.js 的默认行为。

更新
作为引用,Ionic 3.9.2 使用 Webpack 3.10.0,默认的 Ionic webpack 配置如下所示。我真的只关心执行我上面描述的行为的生产构建。

/*
* The webpack config exports an object that has a valid webpack configuration
* For each environment name. By default, there are two Ionic environments:
* "dev" and "prod". As such, the webpack.config.js exports a dictionary object
* with "keys" for "dev" and "prod", where the value is a valid webpack configuration
* For details on configuring webpack, see their documentation here
* https://webpack.js.org/configuration/
*/

var path = require('path');
var webpack = require('webpack');
var ionicWebpackFactory = require(process.env.IONIC_WEBPACK_FACTORY);

var ModuleConcatPlugin = require('webpack/lib/optimize/ModuleConcatenationPlugin');
var PurifyPlugin = require('@angular-devkit/build-optimizer').PurifyPlugin;

var optimizedProdLoaders = [
{
test: /\.json$/,
loader: 'json-loader'
},
{
test: /\.js$/,
loader: [
{
loader: process.env.IONIC_CACHE_LOADER
},

{
loader: '@angular-devkit/build-optimizer/webpack-loader',
options: {
sourceMap: true
}
},
]
},
{
test: /\.ts$/,
loader: [
{
loader: process.env.IONIC_CACHE_LOADER
},

{
loader: '@angular-devkit/build-optimizer/webpack-loader',
options: {
sourceMap: true
}
},

{
loader: process.env.IONIC_WEBPACK_LOADER
}
]
}
];

function getProdLoaders() {
if (process.env.IONIC_OPTIMIZE_JS === 'true') {
return optimizedProdLoaders;
}
return devConfig.module.loaders;
}

var devConfig = {
entry: process.env.IONIC_APP_ENTRY_POINT,
output: {
path: '{{BUILD}}',
publicPath: 'build/',
filename: '[name].js',
devtoolModuleFilenameTemplate: ionicWebpackFactory.getSourceMapperFunction(),
},
devtool: process.env.IONIC_SOURCE_MAP_TYPE,

resolve: {
extensions: ['.ts', '.js', '.json'],
modules: [path.resolve('node_modules')]
},

module: {
loaders: [
{
test: /\.json$/,
loader: 'json-loader'
},
{
test: /\.ts$/,
loader: process.env.IONIC_WEBPACK_LOADER
}
]
},

plugins: [
ionicWebpackFactory.getIonicEnvironmentPlugin(),
ionicWebpackFactory.getCommonChunksPlugin()
],

// Some libraries import Node modules but don't use them in the browser.
// Tell Webpack to provide empty mocks for them so importing them works.
node: {
fs: 'empty',
net: 'empty',
tls: 'empty'
}
};

var prodConfig = {
entry: process.env.IONIC_APP_ENTRY_POINT,
output: {
path: '{{BUILD}}',
publicPath: 'build/',
filename: '[name].js',
devtoolModuleFilenameTemplate: ionicWebpackFactory.getSourceMapperFunction(),
},
devtool: process.env.IONIC_SOURCE_MAP_TYPE,

resolve: {
extensions: ['.ts', '.js', '.json'],
modules: [path.resolve('node_modules')]
},

module: {
loaders: getProdLoaders()
},

plugins: [
ionicWebpackFactory.getIonicEnvironmentPlugin(),
ionicWebpackFactory.getCommonChunksPlugin(),
new ModuleConcatPlugin(),
new PurifyPlugin()
],

// Some libraries import Node modules but don't use them in the browser.
// Tell Webpack to provide empty mocks for them so importing them works.
node: {
fs: 'empty',
net: 'empty',
tls: 'empty'
}
};


module.exports = {
dev: devConfig,
prod: prodConfig
}

最佳答案

如果你使用的是 webpack v4,那么 optimization.splitChunks.cacheGroups就是你要找的。完整文档 here .

现在看起来 OP 想要手动选择哪个模块去哪个包。您可以这样做:

  • 添加两个新的缓存组,例如 optimization.splitChunks.cacheGroups.vendor.private
  • 设置 filename , enforcetest字段
  • cacheGroups.vendor = {
    filename: 'vendor.js',
    enforce: true,
    test: (module) => {
    const vendorList = ['abc', 'xyz']
    return vendorList.includes(module.name)
    }
    }

    // Similar config for `cacheGroups.private`

    关于webpack - 控制 Webpack 3 捆绑/分块(在 Ionic3 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55481447/

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