一、前言
在 Vue 项目中,打包入口文件通常是项目的起始点,它负责引入项目的各种依赖、组件和路由等,并将它们组合成一个完整的应用程序。默认情况下,Vue CLI 创建的项目会有一个固定的打包入口文件,如src/main.js
。
在实际开发中,我们可能需要根据不同的环境、包含多个独立的功能模块,每个模块都可以单独打包。根据用户的需求或特定环境,只加载必要的模块,可以显著减少初始加载时间和资源消耗,以实现更加灵活和可定制化的构建过程
二、实现思路
1、在项目中创建一个配置文件,用于存储不同环境或场景下的入口文件路径。 2、在 Vue CLI 的构建配置中,读取配置文件中的入口文件路径,并将其传递给打包工具。 3、在打包过程中,根据传递的入口文件路径来打包相应的代码。
三、详细步骤
1. 创建配置文件
首先,在项目的根目录下创建一个名为entry.config.js的配置文件。在这个文件中,以环境变量命名(示例:development、production等)来定义不同环境或场景下的入口文件路径。例如:
module.exports = {
development: './src/development-main.js',
production: './src/production-main.js',
// 可以根据需要添加更多的配置项
};
在上面的示例中,使用开发环境和生产环境的环境变量名称当成key,对应的值为对应的入口文件路径
2. 修改 Vue CLI 的构建配置
Vue CLI 提供了一个chainWebpack
方法,用于在构建过程中对 webpack 配置进行更细粒度的修改。在项目的vue.config.js
文件中使用这个方法来读取配置文件中的入口文件路径,并将其传递给打包工具。示例代码如下:
const path = require('path');
const entryConfig = require('./entry.config.js');
module.exports = {
chainWebpack: (config) => {
// 根据环境变量获取对应的入口文件路径
const entryFile = entryConfig[process.env.NODE_ENV];
// 设置打包入口文件
config.entry('app').clear().add(path.resolve(__dirname, entryFile)); // 这里的path.resolve(__dirname, entryFile)是获取当前目录的绝对路径
}
};
在上面的代码中,引入path模块和自定义的配置文件entry.config.js。然后,在chainWebpack方法中,根据当前的环境变量process.env.NODE_ENV从配置文件中获取对应的入口文件路径,并使用path.resolve方法将其转换为绝对路径。最后,通过config.entry('app').clear().add()方法将获取到的入口文件路径设置为打包的入口文件
3. 根据配置创建不同的入口文件
根据配置文件中定义的入口文件路径,在项目的/src目录下创建相应的入口文件。创建development-main.js和production-main.js两个入口文件,分别用于开发环境和生产环境。在入口文件中,根据不同的环境或场景进行特定的配置和初始化操作
// development-main.js
import Vue from 'vue';
import App from './App.vue';
Vue.config.productionTip = false;
new Vue({
render: (h) => h(App)
}).$mount('#app');
// production-main.js
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
Vue.config.productionTip = false;
new Vue({
router,
store,
render: (h) => h(App)
}).$mount('#app');
完成后执行 npm run build 命令,就会根据配置文件中的入口文件路径打包出对应的代码