Coder Social home page Coder Social logo

cap32 / wxapp-webpack-plugin Goto Github PK

View Code? Open in Web Editor NEW
203.0 6.0 60.0 145 KB

📦 微信小程序 webpack 插件

License: MIT License

JavaScript 85.99% TypeScript 14.01%
wxapp weixin webpack webpack-plugin weapp mini-program wechat alipay wechat-mini-program alipay-mini-program

wxapp-webpack-plugin's Introduction

wxapp-webpack-plugin

Build Status Build status PRs Welcome

微信小程序 webpack 插件

为什么要使用 webpack

很多前端开发者都使用过 webpack,通过 webpack 开发 JavaScript 项目可以带来很多好处

  • 支持通过 yarnnpm 引入和使用 node_modules 模块
  • 支持丰富且灵活的 loadersplugins
  • 支持 alias
  • 还有很多...
为什么要使用这个插件
  • 微信小程序开发需要有多个入口文件(如 app.js, app.json, pages/index/index.js 等等),使用这个插件只需要引入 app.js 即可,其余文件将会被自动引入
  • 若多个入口文件(如 pages/index/index.jspages/logs/logs.js)引入有相同的模块,这个插件能避免重复打包相同模块
  • 支持自动复制 app.json 上的 tabbar 图片 (v0.17.0 或以上)

使用方法

安装

yarn add -D wxapp-webpack-plugin

配置 webpack

  1. entry 上引入 { app: './src/app.js' }, 这里的 ./src/app.js 为微信小程序开发所需的 app.js注意 key 必须为 appvalue 支持数组

  2. output 上设置 filename: '[name].js'。 注意 这里 [name].js 是因为 webpack 将会打包生成多个文件,文件名称将以 [name] 规则来输出

  3. 添加 new WXAppWebpackPlugin()plugins

loader 的使用提示

为了使 webpack 能编译和输出非 .js 文件,配置时要按需添加各种 loaders。这里作者推荐使用以下几个对微信小程序开发很有用的 loaders

  • file-loader: 用于输出 *.json*.wxss*.jpg 之类的文件
  • css-loader: 使 webpack 能编译或处理 *.wxss 上引用的文件
  • wxml-loader: 使 webpack 能编译或处理 *.wxml 上引用的文件

开发者也可以根据自身需求和习惯,使用 sass-loader 之类的 loader

完整的项目开发脚手架,请查看 wxapp-boilerplate

API

WXAppWebpackPlugin

用法

webpack.config.babel.js

import WXAppWebpackPlugin from 'wxapp-webpack-plugin';
export default {
  // ...configs,
  plugins: [
    // ...other,
    new WXAppWebpackPlugin(options)
  ],
};
Options

所有 Options 均为可选

  • clear (<Boolean>): 在启动 webpack 时清空 dist 目录。默认为 true
  • commonModuleName (<String>): 公共 js 文件名。默认为 common.js
  • extensions (<Array<String>>): 脚本文件后缀名。默认为 ['.js']

Targets

Webpack target 值,目前有 Targets.WechatTargets.Alipay,如果不配置,webpack target 将会自动设为 Targets.Wechat。如果需要开发支付宝小程序,则改为 Targets.Alipay。开发者也可以通过 process.env.TARGET 之类的配置来动态输出。

示例

webpack.config.babel.js

import WXAppWebpackPlugin, { Targets } from 'wxapp-webpack-plugin';
export default {
  // ...configs,
  target: Targets[process.env.TARGET || 'Wechat'],
};

提示

  • 程序的开发方式与 微信小程序开发文档 一样,开发者需要在 src (源)目录创建 app.jsapp.jsonapp.wxsspages/index/index.js 之类的文件进行开发

License

MIT © Cap32

wxapp-webpack-plugin's People

Contributors

akiq2016 avatar cap32 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

wxapp-webpack-plugin's Issues

动态路径无法识别

如题,假如我在page引用了一个自定义组件,组件有一个image接收一个imageSrc的src路径,在page中传过去imageSrc到组件,这个路径不会被webpack解析到,导致图片出不来,有解决方案吗?

typescript支持的问题

设置脚本后缀支持.ts文件:new WXAppWebpackPlugin({clear:!isDev, scriptExt:'.ts'})
但entry里还是必须设置app.js为.js后缀:entry: {app: [ './src/app.js']}
问题在以下源代码,写死了app.js:(建议支持动态options.scriptExt)
const getEntryFromCompiler = () => {
if (typeof entry === 'string') return entry;
const appJSRegExp = /\bapp(.js)?$/;
const findAppJS = arr => arr.find(path => appJSRegExp.test(path));
if (Array.isArray(entry)) return findAppJS(entry);
if (typeof entry === 'object') {
for (const key in entry) {
if (!entry.hasOwnProperty(key)) continue;
const val = entry[key];
if (typeof val === 'string') return val;
if (Array.isArray(val)) return findAppJS(val);
}
}
};

webpack4

什么时候可以支持webpack4呀?

使用最新webpack v4报错

报错内容为:webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunks instead.

小程序中引入直播插件,报错

async getComponents(components, instance) { const { usingComponents = {} } = (await readJson(${instance}.json).catch( err => err && err.code !== 'ENOENT' && console.error(err) )) || {}; const componentBase = parse(instance).dir; for (const relativeComponent of values(usingComponents)) { if (relativeComponent.indexOf('plugin://') === 0) continue; if (relativeComponent.indexOf('plugin-private://') === 0) continue; const component = resolve(componentBase, relativeComponent); if (!components.has(component)) { components.add(relative(this.base, component)); await this.getComponents(components, component); } } }

插件中应该添加 if (relativeComponent.indexOf('plugin-private://') === 0) continue;

关于支付宝小程序对应的target无效的问题

path:wxapp-webpack-plugin/src/index.js
code:

const miniProgramTarget = compiler => {
	const { options } = compiler;
	compiler.apply(
		new JsonpTemplatePlugin(options.output),
		new FunctionModulePlugin(options.output),
		new NodeSourcePlugin(options.node),
		new LoaderTargetPlugin('web')
	);
};
export const Targets = {
	Wechat(compiler) {
		return miniProgramTarget(compiler);
	},
	Alipay(compiler) {
		return miniProgramTarget(compiler);
	}
};

miniProgramTarget注入使用的是window,作者是否测试是有效的
本人尝试使用miniProgramTarget,支付宝依然报错

Uncaught TypeError: Cannot read property 'webpackJsonp' of undefined

打包后注释警告还在

请问怎么去除 使用
// new webpack.optimize.UglifyJsPlugin({
// comments: false, //去掉注释
// compress: {
// warnings: false //忽略警告,不然会有一大推的黄色字体出现
// }
// })
没作用

组件死循环和wxss文件引用问题

你好,
1.我在使用过程中,发现组件互相引用的话,会出现死循环的现象。我在下面这个地方做了个判断,防止了死循环

qq20180703-093943 2x

2.在编译wxss文件(A)时,如果引用了另外的wxss文件(比如我有个公用字体库B),那么他是直接将复制到A文件中,造成了非常大量的重复代码。请问下我如何修改才能改成是相对引用,而不是复制代码呢?

3.我修改了代码,支持subpackage的加载。
qq20180703-095519 2x

引用微信官方拓展组件webpack报错

wxapp-webpack-plugin 使用最新的0.19.0
在页面中使用官方拓展组件:yarn add @miniprogram-component-plus/tabs
.json:
{ "usingComponents": { "user": "../../components/user/user", "mp-tabs": "@miniprogram-component-plus/tabs" }, "navigationStyle": "custom", "backgroundColor": "#fff" }

打包会报错:TypeError: Cannot read property 'replace' of undefined
我看有几个类似问题,在wxapp-webpack-plugin库中也有

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.