编译配置文件

在运行 wepy build 时会读取当前目录下的编译配置文件 wepy.config.js,文件可以通过 wepy init 根据模板初始化得到。

完整的 wepy.config.js 文件内容如下:

  1. const path = require('path');
  2. module.exports = {
  3. wpyExt: '.wpy',
  4. eslint: false,
  5. resolve: {
  6. alias: {
  7. '@': path.join(__dirname, 'src')
  8. },
  9. aliasFields: ['wepy', 'weapp'],
  10. modules: ['node_modules']
  11. },
  12. compilers: {
  13. less: {
  14. },
  15. babel: {
  16. presets: [
  17. '@babel/preset-env'
  18. ],
  19. }
  20. },
  21. plugins: [],
  22. }

wpyExt

指定 WePY 单文件组件的后缀,默认值为 .wpy。习惯使用 vue 为后缀的开发者可以将此属性设置为 .vue

entry

入口文件, 默认值为:app, 在未改变 wpyExt 属性时,入口文件即为:app.wpy。与 WePY 1 不同的是,在WePY 2 中,CLI 根据入口文件进行编译,未被依赖的文件不会被编译。

src

指定源码目录,默认值为:src

output

指定输出代码目录,默认值为:weapp。WePY 1 中默认输出至 dist 目录,为了方便以后扩展到其它平台,则将默认目录修改为 weapp

target

指定编译目标平台,默认值为:weapp。预留属性,现阶段仅支持小程序平台。

static

指定静态资源目录,多个目录用数组表示。编译时会将目录文件拷贝至 output 的目录中。对于图片等静态资源,需要使用此选项才可以将其拷贝过去。

resolve

自定义模块解析规则,可以查看 WebpackResolve 文档查看使用方法。

WePY 在进行模块解析时,使用的是 Webpack 的 enhanced-resolve 模块。因此,Webpack 的 resolve 功能在 WePY 项目中都可以正常使用。

resolve.alias

创建模块别名,如:

  1. module.exports = {
  2. //...
  3. resolve: {
  4. alias: {
  5. @: path.resolve(__dirname, 'src/'),
  6. Style: path.resolve(__dirname, 'src/Styles/'),
  7. Util: path.resolve(__dirname, 'src/utility/')
  8. }
  9. }
  10. };

因此可以使用别名来代替原来有相对路径引用,如下:

  1. // 二者等价
  2. import Util form '../../../../utility';
  3. import Util from 'Util';

更多使用方法可以参考 webpack.resolve.alias

在 WePY 项目中,创建的别名在 styletemplatescriptconfig 中都适用。在lesssass 中使用模块别名时需要添加 ~ 前缀,如下:

  1. @import '~Style/index.less';

resolve.aliasFields

指定一个解析字段,并按此解析。如:

  1. module.exports = {
  2. //...
  3. resolve: {
  4. aliasFields: ['wepy', 'weapp', 'browser']
  5. }
  6. };

有一些包对不同的平台会设置不同的解析规则,指定 resolve.aliasFields 后,在解析一个模块时,会查找 package.json 中预设的规则进行解析。

其它

更多 resolve 的用法,请查看 Webpack 的 resolve 的相关内容。

plugins

一组编译插件,开发者可以通过提供的插件机制去控制编译的每一个流程。

  1. const TypeScriptCompiler = require('@wepy/compiler-typescript');
  2. const PluginUglifyjs = require('@wepy/plugin-uglifyjs');
  3. module.exports = {
  4. plugins: [
  5. TypeScriptCompiler({
  6. // options
  7. }),
  8. PluginUglifyjs({
  9. // options
  10. })
  11. ]
  12. };

compilers

指定编译器,此属性是保留了 WePY 1 的设计。事实上在 WePY 2 中都是可以通过 plugins 属性完成。

  1. modules.exports = {
  2. compilers: {
  3. less: { }, // 具体的配置项应该查看 [less](https://less.bootcss.com/usage/#less-options) 文档
  4. babel: { }, // 具体的配置项应该查看 [babel](https://babeljs.io/docs/en/) 文档
  5. }
  6. }

以上内容会对<style lang="less"><script lang="babel">的内容进行编译。其中<script>标签的默认 lang 值为 babel

在 WePY 2 中,在检测到 compilers 属性后,会自动引入 @wepy/compiler-${key} 的插件。因此以上配置等价于:

  1. const BabelCompiler = require('@wepy/compiler-babel');
  2. const LessCompiler = require('@wepy/compiler-less');
  3. module.exports = {
  4. plugins: [
  5. BabelCompiler({
  6. // options
  7. }),
  8. LessCompiler({
  9. // options
  10. })
  11. ]
  12. };