UNPKG

4.48 kBJavaScriptView Raw
1/**
2 * 144915 type-vue插件支持双进程模式编译
3 * @type {webpack}
4 */
5
6let webpack = require('webpack');
7
8const config = require("./webpack.config");
9const merge = require("webpack-merge");
10const ExtractTextPlugin = require("extract-text-webpack-plugin");
11
12const distCss = new ExtractTextPlugin({
13 filename:"[name].miniapp.css", allChunks: true,disable: false,
14})
15
16let webpackconfig = {
17 output: {
18 path: light.config.dist,
19 //75948 异步视图支持添加反缓存的后缀
20 chunkFilename: 'lightdist/[name].miniapp.js?[chunkhash]',
21 filename: '[name].miniapp.js'
22 },
23 module: {
24 rules: [
25 {
26 test: /\.vue$/,
27 loader: 'vue-loader',
28 options: {
29 compilerModules: require("./lib/utils").hasPlugin('jsnative') ? [{
30 postTransformNode: el => {
31 require('weex-vue-precompiler')()(el)
32 }
33 }] : undefined,
34 loaders: {
35 css: distCss.extract({
36 use: 'css-loader',
37 fallback: 'vue-style-loader'
38 }),
39 less: distCss.extract({
40 use: 'css-loader!less-loader?indentedSyntax',
41 fallback: 'vue-style-loader'
42 }),
43 },
44 extractCSS: true,
45 postcss:[
46 require('autoprefixer')({
47 browsers: ['> 0.1%', 'ios >= 8', 'not ie < 12']
48 }),
49 require('postcss-plugin-px2rem')({
50 rootValue: 75,
51 minPixelValue: 1.01
52 })
53 ]
54 }
55 }
56 ],
57 },
58 plugins: [
59 distCss,
60 new webpack.DefinePlugin({
61 'process.env.RUNTIME': JSON.stringify("miniapp"),
62 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
63 '__ENV__': require("./env")(light.options.env || 'default')
64 }),
65 ],
66 externals: {
67 vue: 'Vue'
68 },
69 resolve:{
70 // jsnative的支持已经移除,此文件无需存在
71 // alias:{
72 // "miniapp-vue-render4light":require("path").join(light.config.pluginsDir,"node_modules/lighting-plugin-miniapp/render")
73 // }
74 }
75};
76if (process.env.NODE_ENV === "dev") {
77 webpackconfig = merge({
78 watch: true,
79 watchOptions: {
80 ////105231 多页工程的每个.native.js文件都不监听变化
81 ignored: (function () {
82 return ['app.miniapp.js'];
83 })()
84 }
85 }, webpackconfig)
86}
87
88//201467【小程序】light release --console 时设置__base__DEBUG_MODE=true 到代码中
89function extend(item) {
90 let entryObj = { entry: {} };
91 for (var key in config.entry) {
92 entryObj.entry[key] = item;
93 }
94 return entryObj;
95}
96if (light.options.console) {
97 webpackconfig = merge(extend([`${__dirname}/plugins/vconsole.js`]), webpackconfig)
98}
99
100module.exports = {
101 build() {
102 let distConfig = merge(webpackconfig, config);
103
104 // 154005 【Light小程序】【工程转译】支持JSNative工程转译直接编译为小程序目标-scroller 、list等可滚动标签处理
105 // if(require("./lib/utils").hasPlugin('jsnative')) {
106 // Object.keys(distConfig.entry).forEach(function (key) {
107 // distConfig.entry[key] = [`${__dirname}/miniapp.init.js`].concat(distConfig.entry[key]);
108 // });
109 // }
110
111 distConfig.module.rules.forEach(function (rule) {
112 if(rule.test.test("rule.less")){ // 说明:rule.less只是为了检验此规则的存在,并不需要存在此文件
113 rule.use = distCss.extract({
114 fallback: "style-loader",
115 use: ['css-loader', 'less-loader']
116 })
117 }
118 });
119
120 // 59972 【lighting】可以考虑在现有约定的基础上开放自定义配置接口(Webpack和Babel)
121 let buildJS = require("path").join(light.config.src, "build.js");
122 if (require("fs").existsSync(buildJS)) {
123 distConfig = require(buildJS).build(distConfig, merge, webpack)
124 }
125
126 return distConfig;
127 }
128};