Webpack:如何将多个javascript文件捆绑到一个输出文件中?

gg0vcinb  于 2023-02-12  发布在  Webpack
关注(0)|答案(4)|浏览(147)

假设我有两个文件,main.jsapp.js;如何使用Webpack将它们捆绑到一个文件中:捆绑包.js

rkttyhzu

rkttyhzu1#

创建一个entry.js,它是您的webpack条目文件,并在其中创建require附加文件
webpack.config.js

module.exports = {
   entry: './src/entry.js'
   ...
};

/src/entry.js

// new syntax
import './main.js';
import './app.js';

// or old syntax
require('./main.js');
require('./app.js');

如果这两个文件相互依赖,那么在依赖树中反映这一点并在app.js中要求main.js而不是在entry.js中要求main.js将是有益的,例如

a14dhokn

a14dhokn2#

您可以传递一个条目数组:

module.exports = {
   entry: ['./main.js', './app.js'],
   ...
};

此外,您还可以将它们作为CLI选项传递:

webpack ./main.js ./app.js --config=webpack.config.js
cwtwac6a

cwtwac6a3#

您可以使用webpack-concat-plugin。
https://www.npmjs.com/package/webpack-concat-plugin#publicpath-stringboolean-default-webpacks-publicpath

vngu2lb8

vngu2lb84#

由于您的问题是关于webpack的,我假设您已经安装了webpack
(e.g.Yarn:yarn add --dev webpack webpack-cli)。
现在您有不同的选择:

指定webpack.config.js内的所有入口文件

您可以在webpack.config.js中指定所有需要的文件,例如:

const path = require('path');
module.exports = {
    entry: [
        "./script1.js",
        "./script2.js"
    ],
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    // optimization: { minimize: false },
};

然后运行webpack,例如:

yarn webpack --config webpack.config.js

指定额外条目文件中的所有条目文件

然后您可以将所有.js文件导入到一个"条目"文件中(如entry.jsindex.js),例如:

// entry.js: entry file for webpack
require('./script1.js');
require('./script2.js');

然后在webpack.config.js中引用此文件:

const path = require('path');
module.exports = {
    entry: ['./entry.js'],
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    // optimization: { minimize: false },
};

然后运行webpack:

yarn webpack --config webpack.config.js

动态创建入口文件数组

entry属性允许函数动态定义条目。
例如,以过于简单的方式:

const path = require('path');
const fs = require('fs');

const sourceFolder = './src';

const createEntryFilesArray = function(){
    return new Promise(function( resolve, reject ){
        fs.readdir( sourceFolder, (err, files) => {
            if( !err ){
                resolve(
                    files
                        .filter( file => file.endsWith('.js') )
                        .map( file => [ sourceFolder, file ].join('/') )
                );
            } else {
                reject();
            }
        })
    })
};

module.exports = {
    entry: createEntryFilesArray,
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
};

但是你可能想使用更实体的模式(取决于你的文件夹结构),例如,包括使用glob
此外,请注意,文件webpack.config.js只是一个Javascript文件,因此您也可以执行任何您希望动态创建入口文件数组的操作。
例如,以过于简单的方式:

const path = require('path');
const fs = require('fs');

const sourceFolder = './src';
const entryFilesArray = fs.readdirSync( sourceFolder )
    .filter( file => file.endsWith('.js') )
    .map( file => [ sourceFolder, file ].join('/') );

module.exports = {
    entry: entryFilesArray,
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
};

替代品:使用TypeScript编译器

或者,如果你不特别想使用webpack,你也可以使用TypeScript编译器,例如,如果你只是想把多个.js和/或.ts文件捆绑成一个.js文件,特别是如果你无论如何都要使用TypeScript。
这样你就不需要安装Webpack了。但是请注意,如果你不需要安装Typescript的话,这并不节省空间。软件包的大小为ara(当前在我的机器上):

  • typescript:124个文件,67 MB
  • webpackwebpack-cli:3.347个文件,21 MB

将文件与TypeScript编译器捆绑在一起:

安装类型脚本,例如:

yarn add --dev typescript

添加一个tsconfig.json文件,例如:

{
    "files": [
        "./script1.js",
        "./script2.js"
    ],
    "compilerOptions": {
        "target": "es2018",                           /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
        "allowJs": true,                              /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
        "outFile": "./dist/bundle.js",                /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
        "outDir": "./dist",                           /* Specify an output folder for all emitted files. */
//        "removeComments": false,                      /* Disable emitting comments. */
//        "esModuleInterop": true,                      /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
//        "forceConsistentCasingInFileNames": true,     /* Ensure that casing is correct in imports. */
        "strict": true,                               /* Enable all strict type-checking options. */
    }
}

目标文件夹(例如dist)需要存在,它不会自动创建。
使用以下命令启动TypeScript编译器:

yarn run tsc --project tsconfig.json

* 使用插件 *

  • 显然有一些插件可以以不同的方式捆绑.js文件,但遗憾的是我还没有尝试过任何插件。我希望在了解更多信息后能够在这里添加一个示例。*

相关问题