- 前端模块化
前端为什么会需要模块化?
前端模块化的演变:
- 全局函数==污染全局命名空间
- 命名空间NameSpace==内部状态可以被外部状态改写
- 匿名函数自调用==闭包不太容易理解,模块之间存在依赖不好处理
- 文件模块化(commonJS、AMD、UMD文件模块化规范)
- webpack打包js为umd模块
- 编写打包组件库需要的配置文件
- webpack是打包工具
- webpack配置文件只能处理JS和JSON文件,其他文件需要配置loader帮助webpack处理,另外webpack不能处理css文件(比如vue文件,需要安装vue-loader,导入webpack配置文件并配置对应属性,如下)
webpack完整配置: ```javascript const { VueLoaderPlugin } = require(‘vue-loader’); const path = require(‘path’); //nodejs自带 const glob = require(‘glob’); //nodejs自带 const list = {}; /* list数据格式 { card:”./components/lib/card/index.js”, demo:”./components/lib/demo/index.js” } **/plugins: [
new VueLoaderPlugin(),
],
module: {
rules: [
{
test: /\.vue$/,//vue文件使用什么样得loader
use: [{
loader: 'vue-loader'
}]
}
]
}
async function makeList(dirPath, list) {
const files = glob.sync(${dirPath}/**/index.js
);
console.log(‘files’, files);//files [ ‘components/lib/card/index.js’, ‘components/lib/demo/index.js’ ]
files.forEach((item) => {
const component = item.split(/[/.]/)[2];
console.log(‘component’, component);//component card component demo
list[component] = `./${item}`;
}); }
makeList(‘components/lib’, list);
module.exports = { entry: list,//入口文件 mode: ‘development’, output: { filename: ‘[name].umd.js’, path: path.resolve(__dirname, ‘dist’),//使用绝对路径 library: “yui”, libraryTarget: “umd”, }, plugins: [ new VueLoaderPlugin(), ], module: { rules: [ { test: /.vue$/,//vue文件使用什么样得loader use: [{ loader: ‘vue-loader’ }] } ] } }
webpack打包JS执行命令,在package.js中进行配置
```javascript
webpack --config ./webpack.component.js
- Glup打包css
在根目录下创建gulpfile.js文件,将js文件中引用的gulp、gulp-sass、gulp-minify-css、sass进行npm安装
const gulp = require('gulp');
const sass = require('gulp-sass')(require('sass'))//sass->css
const minifyCSS = require('gulp-minify-css');//css压缩
gulp.task('sass', async function () {
return gulp.src('components/**/*.scss')//获取SCSS文件
.pipe(sass())//转换成CSS
.pipe(minifyCSS())//压缩CSS
.pipe(gulp.dest('dist/css'));//输出目录
});
gulp打包css执行命令,在package.js中进行配置
npx gulp sass
配置打包JS和css指令
npm run build:js && npm run build:css