Skip to content
This repository has been archived by the owner on Mar 7, 2024. It is now read-only.

feat: 支持 public 目录 #1016

Merged
merged 13 commits into from
Jun 3, 2020
18 changes: 2 additions & 16 deletions docs/guide/advanced/hybrid.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,6 @@ module.exports = {
};
```

配置完页面后,将原生的代码复制到对应的 `output` 目录,保持和 app.config.js 中配置的目录一致
将原生页面放置到根目录下的 public 目录中。public 目录中的文件会被复制到 dist 目录中

```js
// remax.config.js
const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
configWebpack({ config }) {
config.plugin('copy').use(CopyPlugin, [
[
// 表示将 native 目录整个输出到 output 目录下
{ from: '/path/to/native', to: './' },
],
]);
},
};
```
例如:`cwd/public/pages/index/index.js` 会被复制到 `cwd/dist/pages/index/index.s`
Darmody marked this conversation as resolved.
Show resolved Hide resolved
8 changes: 8 additions & 0 deletions docs/guide/config/public.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
Darmody marked this conversation as resolved.
Show resolved Hide resolved
title: public 目录
order: 4
---

在项目根目录下创建 public 目录,public 目录下的所有文件会被自动复制到 dist 目录下。

你可以将 `原生页面`, `tabbar 中配置的图片` 等等全局资源放在这个目录下。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

18 changes: 3 additions & 15 deletions docs/guide/framework/style.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,27 +78,15 @@ css 中图片引用问题

[遵循 css-loader 的规则](https://github.com/webpack-contrib/css-loader#url)

1. `/path/to/image.png` 绝对路径表示对应输出目录中的 `/path/to` 路径位置,归类为 global assets,需要开发者自己 copy 文件到输出目录中对应的位置
1. `/path/to/image.png` 绝对路径表示对应输出目录中的 `/path/to` 路径位置,归类为 global assets,需要放置在 public 目录下

2. `~@/assets/image.png` `~` 开头表示引入的是 module,可以是 src 下的图片, webpack 可以 resolve。

3. `../../assets/image.png` 相对路径也会被识别为 module,webpack 会处理。

global assets 配置 copy 的参考
对于情况 1, 中的图片,可以放在项目根目录中的 public 目录中。public 目录中的文件会被复制到 dist 目录中。

```js
// remax.config.js
const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
configWebpack({ config }) {
// copy-webpack-plugin v5.x
config.plugin('copy').use(CopyPlugin, [[{ from: 'src/path/to/assets', to: 'path/to/assets' }]]);
// copy-webpack-plugin v6.0.0 入参修改了
config.plugin('copy').use(CopyPlugin, [{ patterns: [{ from: 'src/path/to/assets', to: 'path/to/assets' }] }]);
},
};
```
例如:`cwd/public/path/to/image.png` 会被复制到 `cwd/dist/path/to/image.png`
Darmody marked this conversation as resolved.
Show resolved Hide resolved

## 样式补全

Expand Down
16 changes: 3 additions & 13 deletions docs/guide/v2-migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,25 +171,15 @@ import './index.css';

与 1.0 不同,2.0 中我们将遵循 [css-loader](https://github.com/webpack-contrib/css-loader#url) 的规则:

1. `/path/to/image.png`, 绝对路径表示对应输出目录中的 `/path/to` 路径位置,归类为 global assets,需要开发者自己 copy 文件到输出目录中对应的位置
1. `/path/to/image.png`, 绝对路径表示对应输出目录中的 `/path/to` 路径位置,归类为 global assets,可以放置在 public 目录下

2. `~@/assets/image.png`, `~` 开头表示引入的是 module,可以是 src 下的图片, webpack 可以 resolve。

3. `../../assets/image.png`, 相对路径也会被识别为 module,webpack 会处理。

配置 copy 行为的方式:
对于情况 1, 中的图片,可以放在项目根目录中的 public 目录中。public 目录中的文件会被复制到 dist 目录中。

```js
// remax.config.js
const CopyPlugin = require('copy-webpack-plugin');

module.exports = {
configWebpack({ config }) {
// 详细配置参考 copy-webpack-plugin
config.plugin('copy').use(CopyPlugin, [[{ from: 'src/assets', to: 'assets' }]]);
},
};
```
例如:`cwd/public/path/to/image.png` 会被复制到 `cwd/dist/path/to/image.png`
Darmody marked this conversation as resolved.
Show resolved Hide resolved

### tabBar 中配置的本地图片

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

This file was deleted.

12 changes: 10 additions & 2 deletions packages/remax-cli/src/build/webpack/config.mini.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import * as path from 'path';
import * as webpack from 'webpack';
import Config from 'webpack-chain';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import CopyPlugin from 'copy-webpack-plugin';
import VirtualModulesPlugin from 'webpack-virtual-modules';
import WebpackBar from 'webpackbar';
import { Options } from '@remax/types';
Expand Down Expand Up @@ -186,10 +187,17 @@ export default function webpackConfig(api: API, options: Options, target: Platfo
pluginFiles: api.getRuntimePluginFiles(),
}),
});
config.plugin('webpack-virtual-modules').use(virtualModules);

config.plugin('webpackbar').use(WebpackBar, [{ name: target }]);
const publicDirPath = path.join(options.cwd, 'public');

if (fs.existsSync(publicDirPath)) {
config
.plugin('webpack-copy-plugin')
.use(CopyPlugin, [[{ from: publicDirPath, to: path.join(options.cwd, options.output) }]]);
}
config.plugin('webpack-virtual-modules').use(virtualModules);
Darmody marked this conversation as resolved.
Show resolved Hide resolved
config.plugin('webpackbar').use(WebpackBar, [{ name: target }]);
config.plugin('remax-coverage-ignore-plugin').use(RemaxPlugins.CoverageIgnore);
Darmody marked this conversation as resolved.
Show resolved Hide resolved
config.plugin('mini-css-extract-plugin').use(MiniCssExtractPlugin, [{ filename: `[name]${meta.style}` }]);
config.plugin('remax-optimize-entries-plugin').use(RemaxPlugins.OptimizeEntries, [meta]);
config.plugin('remax-native-files-plugin').use(RemaxPlugins.NativeFiles, [api, options]);
Expand Down
1 change: 1 addition & 0 deletions packages/remax-cli/typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ declare module 'scheduler';
declare module 'slash2';
declare module 'sander';
declare module 'webpack-virtual-modules';
declare module 'copy-webpack-plugin';
declare module 'webpack-node-externals';

declare namespace jest {
Expand Down