grunt中调用webpack
项目中一些很老的技术需要运用webpack管理,这时候必须使用grunt+webpack 配合使用 。做个笔记,不限多说直接上代码
grunt结合webpack
下面是 Gruntfile.js
- const path = require('path')
- const fs = require('fs');
- const webpack = require("./webpack.config.js");
- const destuglifyls = ['dest/limsStyle/equation.js', 'dest/limsStyle/guidance.js', 'dest/limsStyle/postil.js', 'dest/limsStyle/inject.js', 'dest/limsStyle/designTemp.js'];
- const srcbabells = ['limsStyle/postil.js', 'limsStyle/equation.js', 'limsStyle/guidance.js', 'limsStyle/inject.js', 'limsStyle/designTemp.js'];
- const srcjshint = ['src/limsStyle/postil.js', 'src/limsStyle/equation.js', 'src/limsStyle/guidance.js', 'src/limsStyle/inject.js', 'src/limsStyle/designTemp.js'];
- module.exports = function (grunt) {
- grunt.registerTask('setapi', 'setapi..', function (arg1, arg2) {
- var RouteMapLibPath = './dest/limsStyle/RouteMapLib-1.1.js';
- var editConfigPath = './dest/lib/ueditor1_4_3-utf8-net/config.js';
- var data = fs.readFileSync('./dest/limsStyle/config.json');
- var RouteMapLib = fs.readFileSync(RouteMapLibPath).toString();
- var editConfigContent = fs.readFileSync(editConfigPath).toString();
- data = JSON.parse(data);
- if (typeof arg1 != 'undefined') {
- switch (arg1) {
- case 'dev':
- {
- replaceConfig(data.devconfig)
- };
- break;
- case 'test':
- {
- replaceConfig(data.testconfig)
- };
- break;
- case 'build':
- {
- replaceConfig(data.buildconfig)
- };
- break;
- }
- } else {
- replaceConfig(data.location)
- }
- fs.writeFileSync(RouteMapLibPath, RouteMapLib);
- fs.writeFileSync(editConfigPath, editConfigContent);
- function replaceConfig(d) {
- RouteMapLib = RouteMapLib.replace('{#ajaxUrl}', d.ajaxUrl);
- RouteMapLib = RouteMapLib.replace('{#user_token}', d.user_token);
- RouteMapLib = RouteMapLib.replace('{#ELNEdit}', d.ELNEdit);
- editConfigContent = editConfigContent.replace('{#server}', d.ajaxUrl.replace('API/', ''));
- // console.log(RouteMapLib);
- };
- });
- grunt.initConfig({
- clean: ['/dest'],
- jshint: {
- all: srcjshint,
- options: {
- jshintrc: '.jshintrc'
- // globals: {
- // $: false,
- // jQuery: false
- // },
- // browser: true,
- // laxcomma:true,
- // esversion: 6
- }
- },
- webpack: {
- options: {
- stats: !process.env.NODE_ENV || process.env.NODE_ENV === 'development'
- },
- dev: webpack
- },
- // webpack: {
- // options: {
- // stats: !process.env.NODE_ENV || process.env.NODE_ENV === 'development'
- // },
- // prod: webpack,
- // dev: Object.assign({
- // watch: true
- // }, webpack)
- // },
- watch: {
- cwd: 'src',
- files: ['src/**/*.js', 'src/**/*.json', 'src/**/*.html', 'src/limsStyle/*.css', 'src/**/*.less'],
- tasks: ['webpack:dev','copy:main', 'setapi', 'jshint', 'babel'],
- options: {
- reload: true,
- livereload: 35729
- }
- },
- uglify: {
- main: {
- files: [{
- expand: true,
- src: destuglifyls,
- // dest: 'dest',
- sourceMap: true,
- rename: function (dst, src) {
- // To keep the source js files and make new files as `*.min.js`:
- // return dst + '/' + src.replace('.js', '.min.js');
- // Or to override to src:
- return src;
- }
- }]
- },
- },
- cssmin: {
- target: {
- files: [{
- expand: true,
- cwd: 'src/limsStyle',
- src: ['*.css'],
- dest: 'dest/limsStyle'
- }]
- }
- },
- copy: {
- processContentExclude: ['othen/**'],
- main: {
- expand: true,
- cwd: 'src',
- //src: ['**', '!*.sln', '!**lib/diff/**', '!**lib/layer-v3.1.1/**', '!**lib/layerdate/**', '!**.vs/**', '!**lib/bootstrap-3.3.7-dist/**', '!**lib/ueditor1_4_3-utf8-net/third-party/**', '!**lib/ueditor1_4_3-utf8-net/third-party/dialogs/**'], //**
- src: ['limsStyle/**', 'othen/**', '_temp/**', 'images/**', 'layertemplate/**', 'ElnIndex.html', 'designTemplate.html'],
- dest: 'dest/',
- flatten: false,
- filter: 'isFile'
- },
- all: {
- expand: true,
- cwd: 'src',
- src: ['**'], //**
- dest: 'dest/',
- flatten: false,
- filter: 'isFile'
- }
- },
- babel: {
- options: {
- sourceMap: true,
- presets: ['babel-preset-es2015']
- },
- dist: {
- files: [{
- expand: true,
- cwd: 'src/',
- src: srcbabells,
- dest: 'dest/'
- }]
- }
- },
- connect: {
- options: {
- port: 9000,
- hostname: 'localhost',
- livereload: 35729
- },
- server: {
- options: {
- open: true,
- base: [
- "dest"
- ]
- }
- }
- },
- });
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-copy');
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-watch');
- grunt.loadNpmTasks('grunt-contrib-connect');
- grunt.loadNpmTasks('grunt-babel');
- grunt.loadNpmTasks('grunt-contrib-cssmin');
- grunt.loadNpmTasks('grunt-webpack');
- // grunt.registerTask('clean', ['clean:release', 'copy:all']);
- grunt.registerTask('default', ['copy:main', 'webpack:dev', 'babel', 'cssmin', 'uglify', 'setapi', 'connect', 'watch']); //'uglify',
- grunt.registerTask('dev', ['copy:all', 'babel', 'cssmin', 'uglify', 'setapi:dev'])
- grunt.registerTask('test', ['copy:all', 'babel', 'cssmin', 'uglify', 'setapi:test']);
- grunt.registerTask('build', ['copy:all', 'babel', 'cssmin', 'uglify', 'setapi:build']);
- };
下面是 webpack.config.js文件夹
- const path = require('path')
- const webpack = require('webpack')
- const HtmlWebpackPlugin = require('html-webpack-plugin')
- const loaderconfig = require('./vue-loader.conf')
- const VueLoaderPlugin = require('vue-loader/lib/plugin')
- // const packagejson = require('./package.json')
- const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
- module.exports = {
- entry: './src/vuesrc/main.js',
- output: {
- path: path.resolve(__dirname, './src/limsStyle/vuedest/'),
- filename: 'build.js',
- chunkFilename: "[id].build.js?[chunkhash]"
- // vendor: Object.keys(packagejson.dependencies)
- },
- devtool: '#eval-source-map',
- module: {
- rules: [{
- test: /\.vue$/,
- loader: 'vue-loader',
- options: loaderconfig
- },
- {
- test: require.resolve('jquery'),
- use: [{
- loader: 'expose-loader',
- options: 'jQuery'
- }, {
- loader: 'expose-loader',
- options: '$'
- }]
- }
- ]
- },
- resolve: {
- extensions: [' ', '.js', '.vue'],
- // root:"./node_modules",
- alias: {
- 'vue$': 'vue/dist/vue.js'
- }
- },
- optimization: {
- splitChunks: {
- chunks: 'async',
- minSize: 10000,
- maxSize: 0,
- minChunks: 1,
- maxAsyncRequests: 5,
- maxInitialRequests: 3,
- automaticNameDelimiter: '~',
- name: true,
- cacheGroups: {
- vendors: {
- test: /[\\/]node_modules[\\/]/,
- priority: -10,
- name: "vendors"
- },
- default: {
- minChunks: 2,
- priority: -20,
- reuseExistingChunk: true
- }
- }
- },
- runtimeChunk: {
- name: entrypoint => `manifest.${entrypoint.name}`
- }
- },
- plugins: [
- new HtmlWebpackPlugin({
- filename: 'design.html',
- template: './src/vuesrc/index.html',
- inject: true,
- minify: {
- removeComments: true,
- collapseWhitespace: true,
- removeAttributeQuotes: true
- // more options:
- // https://github.com/kangax/html-minifier#options-quick-reference
- },
- // necessary to consistently work with multiple chunks via CommonsChunkPlugin
- chunksSortMode: 'dependency'
- }),
- new VueLoaderPlugin(),
- // new BundleAnalyzerPlugin()
- ]
- }
grunt中调用webpack的更多相关文章
- vue-cli 2.x脚手架build目录中的webpack.base.conf.js配置文件
此文章用来解释vue-cli脚手架build目录中的webpack.base.conf.js配置文件,适用于vue-cli 2.x版本 此配置文件是vue开发环境的wepack相关配置文件,主要用来处 ...
- vue-cli 中的 webpack 配置详解
本篇文章主要介绍了 vue-cli 2.8.2 中的 webpack 配置详解, 做个学习笔记 版本 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack ...
- vue-cli中的webpack配置
编辑模式下显示正常,打开的时候不知道为啥排版有问题.segementfalut链接在这里 版本号 vue-cli 2.8.1 (终端通过vue -V 可查看) vue 2.2.2 webpack 2. ...
- WebApi接口 - 如何在应用中调用webapi接口
很高兴能再次和大家分享webapi接口的相关文章,本篇将要讲解的是如何在应用中调用webapi接口:对于大部分做内部管理系统及类似系统的朋友来说很少会去调用别人的接口,因此可能在这方面存在一些困惑,希 ...
- Entity Framework 6 Recipes 2nd Edition(11-11)译 -> 在LINQ中调用数据库函数
11-11. 在LINQ中调用数据库函数 问题 相要在一个LINQ 查询中调用数据库函数. 解决方案 假设有一个任命(Appointment )实体模型,如Figure 11-11.所示, 我们想要查 ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
- Salesforce Apex页面中调用远端网络服务
本文介绍了Salesforce Apex页面中调用远端网络服务的实现过程. ### 注册远端网络服务 在使用Apex代码调用远端网络服务之前,首先需要在Salesforce中注册远端网络服务地址, 本 ...
- 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
之前在将 Memcached 客户端 EnyimMemcached 迁移 .NET Core 时被这个“坑”坑的刻骨铭心(详见以下链接),当时以为只是在构造函数中调用异步方法(注:这里的异步方法都是指 ...
- C#在winform中调用系统控制台输出
在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示. 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅 ...
随机推荐
- Linux——用户及文件权限管理
2019-07-31 用户管理 查看用户 who am i:打开当前伪终端的用户的用户名 pts/0 后面那个数字就表示打开的伪终端序号,你可以尝试再打开一个终端,然后在里面输入 who am i , ...
- Java中有几种类型的流?
(1)字节流 InputStream/OutputStream ①FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作 ②BufferedInputStre ...
- elasticsearch启动问题
ES安装完一直启动不了,问题解决. 报错: ERROR: bootstrap checks failed system call filters failed to install; check th ...
- Fiddler,对数据进行抓包,拦截,修改等操作
转载....... 一.fiddler设置fiddler默认是只能抓取http网络格式的,所以我们要先设置下使fiddler可以获取到https网络格式 首先tools→options→https进去 ...
- javascript基本类型及类型转换
每种语言都有自己的基本类型,javascript也不例外.在javascript中有五大基本类型,分别是number,string,boolean,null,undefined.其他不属于这五种基本类 ...
- Sublime Text添加gcc编译器
{ "shell_cmd" : "gcc $file_name -o ${file_base_name}", "working_dir" : ...
- Xversion for Mac优秀的SVN客户端功能特色介绍
xversion for mac是一款专为macOS打造的svn客户端,该软件拥有一个设计精美的界面以及全面的功能,简介的用户界面可以让您做到无需浏览用户手册即可熟练使用.xversion支持从最开始 ...
- 以字符集为位数的字符串hash——上海网络赛G
先预处理一个hash[a][b]:开头字符为a, 结尾字符是b,中间的字符hash值为hs的的hash表,保存的是出现次数 对于一个子串求hash值的策略:设hash值是个26位的数,每新增一个字符, ...
- NodeJS+Express+mySQL服务端开发详解
随着NodeJS的发展,现在已经被很多人熟知,NodeJS已经成为了前端开发人员必备的技能.本文不会对NodeJS过多介绍 如果你感兴趣可以访问NodeJS 官网, 维基百科 本文是利用NodeJS+ ...
- [NOIP模拟测试11] 题解
A.string 和河北的一道省选题很像.考场上写的暴力桶排,正解其实就是优化一下这个思路. 开线段树维护字符串中每个字母出现的次数.对于每条询问,区间查询.区间赋值维护即可. 另外,本题卡常严重,正 ...