diff --git a/.babelrc b/.babelrc
index 3ed94dff9..c13c5f627 100644
--- a/.babelrc
+++ b/.babelrc
@@ -1,5 +1,3 @@
{
- "presets": [
- ["env", { "modules": false }]
- ]
+ "presets": ["es2015"]
}
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 000000000..d0dd64cbb
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,4 @@
+{
+ "root": true,
+ "extends": "vue"
+}
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index b31f02096..000000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = {
- root: true,
- extends: ['plugin:vue-libs/recommended'],
- rules: {
- indent: 'off',
- 'space-before-function-paren': 'off'
- }
-}
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 6313b56c5..000000000
--- a/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* text=auto eol=lf
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index 0a3ad19f4..000000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,46 +0,0 @@
-name: 'ci'
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
-jobs:
- unit-test:
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- os:
- - ubuntu-latest
- - macos-latest
- - windows-latest
- fail-fast: false
- name: "Unit Test: ${{ matrix.os }}"
- steps:
- - uses: actions/checkout@v2
-
- - name: Install pnpm
- uses: pnpm/action-setup@v2
- with:
- version: 8
-
- - name: Set node version to 16
- uses: actions/setup-node@v2
- with:
- node-version: 16
- cache: 'pnpm'
-
- - run: pnpm install
-
- - name: Run unit tests
- run: pnpm run test
-
- - name: Set up webpack 5 tests
- run: npx json -f package.json -I -e "this.resolutions = {}, this.resolutions.webpack = '^5.0.0', this.devDependencies.webpack = '^5.0.0' "
-
- - name: Install webpack 5
- run: pnpm install --no-frozen-lockfile
-
- - name: Run unit tests for webpack 5
- run: pnpm run test && pnpm run test:match-resource
diff --git a/.gitignore b/.gitignore
index 914a2dab2..e45d3c71e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,7 @@
-.idea
-.DS_Store
-exploration
node_modules
-*.log
-example/dist
-docs/.vuepress/dist
-test/.cache
-.vscode
-TODOS
+npm-debug.log
+test/output
+docs/_book
+.DS_Store
+.idea
+*.iml
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 6e52da593..000000000
--- a/.npmignore
+++ /dev/null
@@ -1,10 +0,0 @@
-example
-test
-*.yml
-*.log
-yarn.lock
-tsconfig.json
-docs
-.github
-.vscode
-TODOS
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 4b1b4d60d..000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,762 +0,0 @@
-
-# [15.11.1](https://github.com/vuejs/vue-loader/compare/v15.11.0...v15.11.1) (2023-10-18)
-
-### Bug Fixes
-
-* fix: fix read property error for accessing lang of script ([#2060](https://github.com/vuejs/vue-loader/pull/2060))
-
-
-
-# [15.11.0](https://github.com/vuejs/vue-loader/compare/v15.10.2...v15.11.0) (2023-10-18)
-
-### Features
-
-* A new `experimentalInlineMatchResource` option (webpack 5 only), which leverages webpack 5's [inline matchResource](https://webpack.js.org/api/loaders/#inline-matchresource) feature in the underlying implementation, and works well with the [`experiments.css`](https://webpack.js.org/configuration/experiments/#experimentscss) feature. This also makes `vue-loader` compatible with [Rspack](https://www.rspack.dev/guide/vue). ([#2058](https://github.com/vuejs/vue-loader/pull/2058))
-
-
-
-# [15.10.2](https://github.com/vuejs/vue-loader/compare/v15.10.1...v15.10.2) (2023-08-23)
-
-### Bug Fixes
-
-* don't enable prettify by default if prettier 3 is detected ([aa2558d](https://github.com/vuejs/vue-loader/commit/aa2558d))
-
-
-
-# [15.10.1](https://github.com/vuejs/vue-loader/compare/v15.10.0...v15.10.1) (2022-11-14)
-
-### Bug Fixes
-
-* skip thread-loader when cloning js rules to template compilation pipeline, fixes ([fb6ff6e](https://github.com/vuejs/vue-loader/commit/fb6ff6e))
-
-
-
-# [15.10.0](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.6...v15.10.0) (2022-07-01)
-
-
-
-
-# [15.10.0-beta.6](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.5...v15.10.0-beta.6) (2022-06-20)
-
-
-### Bug Fixes
-
-* always pass id to stylePostLoader when possible ([364ad09](https://github.com/vuejs/vue-loader/commit/364ad09))
-
-
-
-
-# [15.10.0-beta.5](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.4...v15.10.0-beta.5) (2022-06-20)
-
-
-### Bug Fixes
-
-* css v-bind in production mode ([655e5f8](https://github.com/vuejs/vue-loader/commit/655e5f8))
-
-
-
-
-# [15.10.0-beta.4](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.3...v15.10.0-beta.4) (2022-06-20)
-
-
-### Features
-
-* support css v-bind (requires 2.7.0-beta.3) ([d653f3b](https://github.com/vuejs/vue-loader/commit/d653f3b))
-
-
-
-
-# [15.10.0-beta.3](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.2...v15.10.0-beta.3) (2022-06-16)
-
-
-### Bug Fixes
-
-* cache descriptor with correct resource path ([f6c83b5](https://github.com/vuejs/vue-loader/commit/f6c83b5))
-
-
-
-
-# [15.10.0-beta.2](https://github.com/vuejs/vue-loader/compare/v15.10.0-beta.1...v15.10.0-beta.2) (2022-06-16)
-
-
-### Features
-
-* use script-analyzed bindings when compiling template ([55de28c](https://github.com/vuejs/vue-loader/commit/55de28c))
-
-
-
-
-# [15.10.0-beta.1](https://github.com/vuejs/vue-loader/compare/v15.9.8...v15.10.0-beta.1) (2022-06-14)
-
-
-### Features
-
-* apply js loaders to compiled template code when used with 2.7 ([30464a8](https://github.com/vuejs/vue-loader/commit/30464a8))
-* compat for vue 2.7, support `
-
-
+``` js
+npm install -g vue-cli
+vue init webpack-simple hello
+cd hello
+npm install
+npm run dev
```
-There are many cool features provided by `vue-loader`:
-
-- Allows using other webpack loaders for each part of a Vue component, for example Sass for `
-```
-
-There are many cool features provided by `vue-loader`:
-
-- Allows using other webpack loaders for each part of a Vue component, for example Sass for `
+```
+
+#### webpack.config.js
+
+``` js
+// Webpack 2.x
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ // extract all content as raw text
+ 'docs': ExtractTextPlugin.extract('raw-loader'),
+ }
+ }
+ }
+ ]
+ },
+ plugins: [
+ // output all docs into a single file
+ new ExtractTextPlugin('docs.md')
+ ]
+}
+```
+
+## Runtime available docs
+
+Here's an example of injecting the `` custom blocks into the component so that it's available during runtime.
+
+#### docs-loader.js
+
+In order for the custom block content to be injected, we'll need a custom loader:
+
+``` js
+module.exports = function (source, map) {
+ this.callback(null, 'module.exports = function(Component) {Component.options.__docs = ' +
+ JSON.stringify(source) +
+ '}', map)
+}
+```
+
+#### webpack.config.js
+
+Now we'll configure webpack to use our custom loader for `` custom blocks.
+
+``` js
+const docsLoader = require.resolve('./custom-loaders/docs-loader.js')
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ 'docs': docsLoader
+ }
+ }
+ }
+ ]
+ }
+}
+```
+
+#### component.vue
+
+We are now able to access the `` block's content of imported components during runtime.
+
+``` html
+
+
+
+
{{ docs }}
+
+
+
+
+```
diff --git a/docs/en/configurations/extract-css.md b/docs/en/configurations/extract-css.md
new file mode 100644
index 000000000..f40b2c017
--- /dev/null
+++ b/docs/en/configurations/extract-css.md
@@ -0,0 +1,104 @@
+# Extracting CSS into a Single File
+
+``` bash
+npm install extract-text-webpack-plugin --save-dev
+```
+
+## The Easy Way
+
+> requires vue-loader@^12.0.0 and webpack@^2.0.0
+
+``` js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // other options...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ extractCSS: true
+ }
+ }
+ ]
+ },
+ plugins: [
+ new ExtractTextPlugin("style.css")
+ ]
+}
+```
+
+The above will automatically handle extraction for `
+```
+
+Under the hood, the text content inside the `
+```
+
+However, note this makes your Vue component Webpack-specific and not compatible with Browserify and [vueify](https://github.com/vuejs/vueify). **If you intend to ship your Vue component as a reusable 3rd-party component, avoid using this syntax.**
diff --git a/docs/en/features/css-modules.md b/docs/en/features/css-modules.md
new file mode 100644
index 000000000..af9fb3d66
--- /dev/null
+++ b/docs/en/features/css-modules.md
@@ -0,0 +1,117 @@
+# CSS Modules
+
+> requires ^9.8.0
+
+[CSS Modules](https://github.com/css-modules/css-modules) is a popular system for modularizing and composing CSS. `vue-loader` provides first-class integration with CSS Modules as an alternative for simulated scoped CSS.
+
+### Usage
+
+Just add the `module` attribute to your `
+```
+
+This will turn on CSS Modules mode for `css-loader`, and the resulting class identifier object will be injected into the component as a computed property with the name `$style`. You can use it in your templates with a dynamic class binding:
+
+``` html
+
+
+ This should be red
+
+
+```
+
+Since it's a computed property, it also works with the object/array syntax of `:class`:
+
+``` html
+
+
+
+ Am I red?
+
+
+ Red and bold
+
+
+
+```
+
+And you can also access it from JavaScript:
+
+``` html
+
+```
+
+Refer to the [CSS Modules spec](https://github.com/css-modules/css-modules) for mode details such as [global exceptions](https://github.com/css-modules/css-modules#exceptions) and [composition](https://github.com/css-modules/css-modules#composition).
+
+### Custom Inject Name
+
+You can have more than one `
+
+
+```
+
+### Configuring `css-loader` Query
+
+CSS Modules are processed via [css-loader](https://github.com/webpack/css-loader). With `
+
+
+
hi
+
+```
+
+Into the following:
+
+``` html
+
+
+
+
hi
+
+```
+
+#### Notes
+
+1. You can include both scoped and non-scoped styles in the same component:
+
+ ``` html
+
+
+
+ ```
+
+2. A child component's root node will be affected by both the parent's scoped CSS and the child's scoped CSS.
+
+3. Partials are not affected by scoped styles.
+
+4. **Scoped styles do not eliminate the need for classes**. Due to the way browsers render various CSS selectors, `p { color: red }` will be many times slower when scoped (i.e. when combined with an attribute selector). If you use classes or ids instead, such as in `.example { color: red }`, then you virtually eliminate that performance hit. [Here's a playground](http://stevesouders.com/efws/css-selectors/csscreate.php) where you can test the differences yourself.
+
+5. **Be careful with descendant selectors in recursive components!** For a CSS rule with the selector `.a .b`, if the element that matches `.a` contains a recursive child component, then all `.b` in that child component will be matched by the rule.
diff --git a/docs/en/options.md b/docs/en/options.md
new file mode 100644
index 000000000..dcb2ad3dd
--- /dev/null
+++ b/docs/en/options.md
@@ -0,0 +1,260 @@
+# Options Reference
+
+## Usage Difference Between Webpack 1 & 2
+
+For Webpack 2: pass the options directly to the loader rule.
+
+``` js
+module.exports = {
+ // ...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ // vue-loader options
+ }
+ }
+ ]
+ }
+}
+```
+
+For Webpack 1.x: add a root `vue` block in your Webpack config.
+
+``` js
+module.exports = {
+ // ...
+ vue: {
+ // vue-loader options
+ }
+}
+```
+
+### loaders
+
+- type: `{ [lang: string]: string }`
+
+ An object specifying Webpack loaders to overwrite the default loaders used for language blocks inside `*.vue` files. The key corresponds to the `lang` attribute for language blocks, if specified. The default `lang` for each type is:
+
+ - ``: `html`
+ - `
+
+
+
+
+ This could be e.g. documentation for the component.
+
+```
+
+`vue-loader` will parse the file, extract each language block, pipe them through other loaders if necessary, and finally assemble them back into a CommonJS module whose `module.exports` is a Vue.js component options object.
+
+`vue-loader` supports using non-default languages, such as CSS pre-processors and compile-to-HTML template languages, by specifying the `lang` attribute for a language block. For example, you can use SASS for the style of your component like this:
+
+``` html
+
+```
+
+More details can be found in [Using Pre-Processors](../configurations/pre-processors.md).
+
+### Language Blocks
+
+#### ``
+
+- Default language: `html`.
+
+- Each `*.vue` file can contain at most one `` block at a time.
+
+- Contents will be extracted as a string and used as the `template` option for the compiled Vue component.
+
+#### `
+```
+
+Beware that `src` imports follow the same path resolution rules to CommonJS `require()` calls, which means for relative paths you need to start with `./`, and you can import resources directly from installed NPM packages, e.g:
+
+``` html
+
+
-```
-
-The `module` attribute instructs Vue Loader to inject the CSS modules locals object into the component as a computed property with the name `$style`. You can then use it in your templates with a dynamic class binding:
-
-``` vue
-
-
- This should be red
-
-
-```
-
-Since it's a computed property, it also works with the object/array syntax of `:class`:
-
-``` vue
-
-
-
- Am I red?
-
-
- Red and bold
-
-
-
-```
-
-And you can also access it from JavaScript:
-
-``` vue
-
-```
-
-Refer to the [CSS Modules spec](https://github.com/css-modules/css-modules) for mode details such as [global exceptions](https://github.com/css-modules/css-modules#exceptions) and [composition](https://github.com/css-modules/css-modules#composition).
-
-## Opt-in Usage
-
-If you only want to use CSS Modules in some of your Vue components, you can use a `oneOf` rule and check for the `module` string in `resourceQuery`:
-
-``` js
-// webpack.config.js -> module.rules
-{
- test: /\.css$/,
- oneOf: [
- // this matches `
-
-
-```
diff --git a/docs/guide/custom-blocks.md b/docs/guide/custom-blocks.md
deleted file mode 100644
index f34c18317..000000000
--- a/docs/guide/custom-blocks.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# Custom Blocks
-
-You can define custom language blocks inside `*.vue` files. Loaders applied for a custom block are matched based on the `lang` attribute of the block, the block's tag name, and the rules in your webpack config.
-
-If a `lang` attribute is specified, the custom block will be matched as a file with the `lang` as its extension.
-
-You can also use `resourceQuery` to match a rule against a custom block with no `lang`. For example, to match against `` custom blocks:
-
-``` js
-{
- module: {
- rules: [
- {
- resourceQuery: /blockType=foo/,
- loader: 'loader-to-use'
- }
- ]
- }
-}
-```
-
-If a matching rule is found for a custom block, it will be processed; otherwise the custom block will be silently ignored.
-
-Additionally, if the custom block exports a function as the final result after being processed by all the matching loaders, that function will be called with the component of the `*.vue` file as a parameter.
-
-## Example
-
-Here's an example of injecting the `` custom blocks into the component so that it's available during runtime.
-
-In order for the custom block content to be injected, we'll write a custom loader:
-
-``` js
-module.exports = function (source, map) {
- this.callback(
- null,
- `export default function (Component) {
- Component.options.__docs = ${
- JSON.stringify(source)
- }
- }`,
- map
- )
-}
-```
-
-Now we'll configure webpack to use our custom loader for `` custom blocks.
-
-``` js
-// wepback.config.js
-module.exports = {
- module: {
- rules: [
- {
- resourceQuery: /blockType=docs/,
- loader: require.resolve('./docs-loader.js')
- }
- ]
- }
-}
-```
-
-We are now able to access the `` block's content of imported components during runtime.
-
-``` vue
-
-
-
Hello
-
-
-
-This is the documentation for component B.
-
-```
-
-``` vue
-
-
-
+
+
+
+```
diff --git a/docs/kr/configurations/extract-css.md b/docs/kr/configurations/extract-css.md
new file mode 100644
index 000000000..e6aede8f4
--- /dev/null
+++ b/docs/kr/configurations/extract-css.md
@@ -0,0 +1,104 @@
+# CSS 단일 파일로 추출하기
+
+``` bash
+npm install extract-text-webpack-plugin --save-dev
+```
+
+## 쉬운 방법
+
+> vue-loader@^12.0.0와 webpack@^2.0.0 필요
+
+``` js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // other options...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ extractCSS: true
+ }
+ }
+ ]
+ },
+ plugins: [
+ new ExtractTextPlugin("style.css")
+ ]
+}
+```
+
+위 코드는 `*.vue` 파일 내부에서 `
+```
+
+내부적으로, `
+```
+
+그러나 이것은 Vue 컴포넌트가 Webpack에 한정되어 있고 Browserify 및 [vueify](https://github.com/vuejs/vueify)와 호환되지 않습니다. **Vue 컴포넌트를 재사용 가능한 써드파티로 제공하려면 이 구문을 사용하지 마십시오.**
diff --git a/docs/kr/features/css-modules.md b/docs/kr/features/css-modules.md
new file mode 100644
index 000000000..c1c8edbf2
--- /dev/null
+++ b/docs/kr/features/css-modules.md
@@ -0,0 +1,117 @@
+# CSS 모듈
+
+> 9.8.0 이상 버전을 요구합니다
+
+[CSS 모듈](https://github.com/css-modules/css-modules)은 CSS을 모듈화하고 구성하는데 널리 사용되는 시스템입니다. `vue-loader`는 시뮬레이트된 범위 CSS의 대안으로 CSS 모듈과 함께 1급 클래스로의 통합을 제공합니다.
+
+### 사용법
+
+`
+```
+
+이렇게하면 `css-loader`에 대한 CSS 모듈 모드가 켜지고 결과적으로 클래스 식별자 오브젝트는 `$style` 이름의 계산된 속성으로 컴포넌트에 주입됩니다. 동적 클래스 바인딩을 사용하여 템플릿에서 이를 사용할 수 있습니다.
+
+``` html
+
+
+ 이것은 빨간색이야
+
+
+```
+
+이는 계산된 속성이기 때문에 `:class`의 오브젝트/배열 문법에도 작동합니다.
+
+``` html
+
+
+
+ 나는 빨간색이야?
+
+
+ 나는 빨간색이면서 볼드야
+
+
+
+```
+
+또한 JavaScript에서도 접근할 수 있습니다.
+
+``` html
+
+```
+
+[전역 예외사항](https://github.com/css-modules/css-modules#exceptions)과 [구성](https://github.com/css-modules/css-modules#composition) 같은 자세한 정보는 [CSS 모듈 스펙](https://github.com/css-modules/css-modules)을 참고하세요.
+
+### 사용자 정의 이름 주입
+
+하나의 `*.vue` 컴포넌트 내에 하나 이상의 `
+
+
+```
+
+### `css-loader` 쿼리 설정
+
+CSS 모듈은 [css-loader](https://github.com/webpack/css-loader)를 통해 처리됩니다. `
+
+
+
안녕
+
+```
+
+다음과 같이 변환됩니다.
+
+``` html
+
+
+
+
안녕
+
+```
+
+#### 참고사항
+
+1. 범위가 지정된 스타일과 범위가 지정되지 않은 스타일은 동일한 컴포넌트에 포함 할 수 있습니다.
+
+ ``` html
+
+
+
+ ```
+
+2. 하위 컴포넌트의 루트 노드는 상위 범위 CSS와 하위 범위 CSS의 영향을 받습니다.
+
+3. Partial은 범위가 지정된 스타일의 영향을 받지 않습니다.
+
+4. **범위가 지정된 스타일은 클래스의 필요성을 제거하는 것이 아닙니다**. 브라우저가 다양한 CSS 셀렉터를 렌더링하는 방식 때문에 `p { color: red }`는 범위(즉 속성 선택자와 결합될 때)가 지정될 때 몇 배는 더 느려집니다. `.example { color: red }`와 같이 클래스 또는 id를 대신 사용한다면 성능 이슈를 해결할 수 있습니다. [여기 플레이그라운드](http://stevesouders.com/efws/css-selectors/csscreate.php)에서 차이점을 테스트 할 수 있습니다.
+
+5. **하위 컴포넌트의 선택자 사용을 조심하세요!** 선택자 `.a .b`가 있는 CSS 규칙의 경우 `.a`와 일치하는 요소에 하위 컴포넌트가 포함되어 있을 경우 해당 하위 컴포넌트의 모든 `.b`가 CSS 규칙에 적용됩니다.
diff --git a/docs/kr/options.md b/docs/kr/options.md
new file mode 100644
index 000000000..3c7572fa0
--- /dev/null
+++ b/docs/kr/options.md
@@ -0,0 +1,249 @@
+# 옵션 레퍼런스
+
+## Webpack 1 & 2 사용 방법의 차이점
+
+Webpack 2 : 직접 loader 규칙에 전달합니다
+
+``` js
+module.exports = {
+ // ...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ // vue-loader 옵션
+ }
+ }
+ ]
+ }
+}
+```
+
+Webpack 1.x의 경우 Webpack 설정에 루트 `vue` 블럭을 추가합니다.
+
+``` js
+module.exports = {
+ // ...
+ vue: {
+ // vue-loader 옵션
+ }
+}
+```
+
+### 로더
+
+- 타입: `{ [lang: string]: string }`
+
+ `*.vue` 파일의 언어 블럭에 사용할 Webpack 로더를 지정하는 객체입니다. 이 키는 특별히 지정된 경우 language block에 대한 `lang` 속성에 해당합니다. 각 타입에 대한 기본적인 `lang`은 다음과 같습니다.
+
+ - ``: `html`
+ - `
+
+
+
+
+ 예: 컴포넌트에 대한 설명서
+
+```
+
+`vue-loader`는 파일을 파싱하고 각 language block을 추출하며 필요한 경우 다른 로더를 통해 파이프 처리한 후 마지막으로 Module.exports가 Vue.js 컴포넌트 엘리먼트 옵션 객체인 CommonJS 모듈로 다시 조합합니다.
+
+`vue-loader`는 language block에 `lang` 속성을 지정하여 CSS 전처리기나 HTML에서 템플릿을 컴파일 하는 것과 같은 기본 언어가 아닌 것을 사용할 수 있게 합니다. 예를 들어 컴포넌트 스타일에 SASS를 사용할 수 있습니다.
+
+``` html
+
+```
+
+[Pre-Processors 사용방법](../configurations/pre-processors.md)을 확인하세요.
+
+### Language Blocks
+
+#### ``
+
+- 기본 언어 : `html`.
+
+- 각 `*.vue` 파일은 한번에 최대 하나의 `` 블록을 포함할 수 있습니다.
+
+- 내용은 문자열로 추출되어 컴파일 된 Vue 컴포넌트의 `template` 옵션으로 사용합니다.
+
+#### `
+```
+
+`src` import는 CommonJS의 `require()` 호출과 동일한 경로 규칙을 사용하므로 `./`로 시작하는 상대 경로를 이용해 NPM 패키지를 직접 가져올 수 있습니다.
+
+``` html
+
+
+```
+
+#### webpack.config.js
+
+```js
+// Webpack 2.x
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ // extrai todo conteúdo de em texto bruto
+ 'docs': ExtractTextPlugin.extract('raw-loader'),
+ }
+ }
+ }
+ ]
+ },
+ plugins: [
+ // saída de todos os docs em um único arquivo
+ new ExtractTextPlugin('docs.md')
+ ]
+}
+```
+
+## Documentos disponíveis em tempo de execução.
+
+Aqui está um exemplo de injetar os blocos personalizados `` no componente para que ele esteja disponível durante o tempo de execução.
+
+### docs-loader.js
+
+Para que o conteúdo do bloco personalizado seja injetado, precisamos de um carregador personalizado:
+
+```js
+ module.exports = function (source, map) {
+ this.callback(null, 'module.exports = function(Component) {Component.options.__docs = ' +
+ JSON.stringify(source) +
+ '}', map)
+ }
+ ```
+
+#### webpack.config.js
+
+Agora, vamos configurar o webpack para usar o nosso carregador personalizado para blocos customizados ``.
+
+``` js
+ const docsLoader = require.resolve('./custom-loaders/docs-loader.js')
+
+ module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ 'docs': docsLoader
+ }
+ }
+ }
+ ]
+ }
+ }
+ ```
+
+ #### component.vue
+
+ Agora podemos acessar o conteúdo do bloco `` de componentes importados durante o tempo de execução.
+
+ ``` html
+
+
+
+
{{ docs }}
+
+
+
+
+ ```
diff --git a/docs/pt_BR/configurations/extract-css.md b/docs/pt_BR/configurations/extract-css.md
new file mode 100644
index 000000000..b15e95ea4
--- /dev/null
+++ b/docs/pt_BR/configurations/extract-css.md
@@ -0,0 +1,70 @@
+# Extraindo CSS em um único arquivo
+
+Exemplo de configuração para extrair todo CSS processado de todos componentes Vue em um único arquivo CSS:
+
+### Webpack 2.x
+
+```bash
+npm install extract-text-webpack-plugin --save-dev
+```
+
+```js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // outras opções...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ loaders: {
+ css: ExtractTextPlugin.extract({
+ loader: 'css-loader',
+ fallbackLoader: 'vue-style-loader' // <- isto é uma dependência de vue-loader, então não é necessário instalar explicitamente se estiver usando npm3
+ })
+ }
+ }
+ }
+ ]
+ },
+ plugins: [
+ new ExtractTextPlugin("style.css")
+ ]
+}
+```
+
+### Webpack 1.x
+
+```bash
+npm install extract-text-webpack-plugin
+```
+
+```js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // outras opções...
+ module: {
+ loaders: [
+ {
+ test: /\.vue$/,
+ loader: 'vue'
+ },
+ ]
+ },
+ vue: {
+ loaders: {
+ css: ExtractTextPlugin.extract("css"),
+ // você também pode incluir
+```
+
+Por baixo do capô, o conteúdo de texto dentro da tag `
+```
+
+Contudo, observe que isso faz com que seu componente Vue se torne especifico para Webpack e não compatível com Browserify e [vueify](https://github.com/vuejs/vueify). **Se você pretende enviar seu componente Vue como um componente reutilizável para terceiros, evite usar está sintaxe**.
diff --git a/docs/pt_BR/features/css-modules.md b/docs/pt_BR/features/css-modules.md
new file mode 100644
index 000000000..c1fbba6bb
--- /dev/null
+++ b/docs/pt_BR/features/css-modules.md
@@ -0,0 +1,117 @@
+# Módulos CSS
+
+> Requer versão ^9.8.0
+
+[Módulos CSS](https://github.com/css-modules/css-modules) é um sistema popula para modularização e composição de CSS. `vue-loader` fornece integração de alto nível com módulos CSS como uma alternativa para simular escopo CSS.
+
+### Uso
+
+Basta adicionar o atributo `module` ao seu `
+```
+
+Isto ativará o modo Módulo CSS para `css-loader`, e a classe resultante que identifica o objeto será injetada dentro do componente como uma propriedade computada com o nome `$style`. Você pode usá-lo em seus templates com uma ligação de classe dinâmica.
+
+```html
+
+
+ Isto deve ser vermelho
+
+
+```
+
+Uma vez que a propriedade é computada, ela também funciona com a sintaxe object/array de `:class`:
+
+```html
+
+
+
+ Eu sou vermelho?
+
+
+ Vermelho e negrito
+
+
+
+```
+
+E você também pode acessá-la com JavaScript:
+
+```html
+
+```
+
+Consulte a [especificação do Módulo CSS](https://github.com/css-modules/css-modules) para detalhes como modo [exceções globais](https://github.com/css-modules/css-modules#exceptions) e [composição](https://github.com/css-modules/css-modules#composition).
+
+### Nome de Injeção Personalizado
+
+Você pode ter mais de uma tag `
+
+
+```
+
+### Configurando consulta `css-loader`
+
+Módulos CSS são processados via [css-loader](https://github.com/webpack/css-loader). Com `
+
+
+
hi
+
+```
+
+Para o seguinte:
+
+```html
+
+
+
+
hi
+
+```
+
+#### Observações
+
+1. Você pode incluir ambos os estilos com escopo e sem escopo no mesmo componente:
+
+ ```html
+
+
+
+ ```
+
+2. Um nó raiz do componente filho irá ser afetado por ambos os CSS com escopo dos parentes e o CSS com escopo dos filhos.
+
+3. Templates parciais não são afetados por estilo com escopo.
+
+4. **Os estilos com escopo não eliminam a necessidade de classes**. Devido a forma como navegadores processam vários seletores CSS, `p { color: red }` irá ser muitas vezes mais lento quando com escopo \(exemplo: quando combinado com um seletor de atributo\). Se você usa classes ou ids ao invés, como em `.example { color: red }`, então você elimina praticamente esse desempenho atingido. [Aqui está um playground](http://stevesouders.com/efws/css-selectors/csscreate.php) onde você pode testar as diferenças você mesmo.
+
+5. **Tenha cuidado com seletores descendentes em componentes recursivos!** Para uma regra CSS com o seletor `.a .b`, se o elemento que coincide com `.a` contém um componente filho recursivo, então todos os `.b` nesse componente filho serão correspondidos pela regra.
diff --git a/docs/pt_BR/options.md b/docs/pt_BR/options.md
new file mode 100644
index 000000000..a6db98ac7
--- /dev/null
+++ b/docs/pt_BR/options.md
@@ -0,0 +1,188 @@
+# Referência de Opções
+
+## Diferença do uso entre Webpack 1 & 2
+
+Para Webpack 2: passe as opções diretamente para a regra do carregador.
+
+```js
+module.exports = {
+ // ...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ // opções de vue-loader
+ }
+ }
+ ]
+ }
+}
+```
+
+Para Webpack 1.x: Adicione um bloco \`vue\` na raiz de suas configurações Webpack:
+
+```js
+module.exports = {
+ // ...
+ vue: {
+ // opções de vue-loader
+ }
+}
+```
+
+### loaders
+
+- tipo: `{ [lang: string]: string }`
+
+ Um objeto especificando carregadores de Webpack para substituir carregadores padrão usados para blocos de linguagem dentro de arquivos `*.vue`. A chave corresponde ao atributo `lang` para o bloco de linguagem, se especificado. O padrão `lang` para cada tipo é:
+
+ - ``: `html`
+ - `
+
+
+
+
+ Iso poderia ser a documentação do componente.
+
+```
+
+`vue-loader` analisará o arquivo, extrair cada bloco de linguagem canalizá-lo através de outros carregadores se necessário, e finalmente montá-lo de volta em um módulo CommonJs cujo `module.exports` seja um objeto de opções do componente Vue.js.
+
+`vue-loader` suporta o uso de linguagens não-padrão, tais como pré-processadores CSS e linguagem que compila para HTML a partir de um template, especificando o atributo `lang` para um bloco de linguagem. Por exemplo, você pode usar SASS para o estilo do seu componente como este:
+
+```html
+
+```
+
+Mais detalhes podem ser encontrados em [Usando Pré-Processadores](../configurations/pre-processors.md).
+
+### Blocos de Linguagem
+
+#### ``
+
+- Linguagem padrão: `html`.
+
+- Cada arquivo `*.vue` pode conter no máximo um bloco `` por vez.
+
+- O Conteúdo será extraído como uma string e usado como a opção `template` para o componente Vue compilado.
+
+#### `
+```
+
+Tenha em mente que as importações `src` seguem as mesmas regras de resolução de caminho que as chamadas `require()` do CommonJs, isto significa que para caminhos relativo você precisará iniciar com `./`, e você pode importar recursos diretamente a partir de pacotes instalado com NPM, exemplo:
+
+```html
+
+
+```
+
+As importações `src` também funcionam com blocos customizados, por exemplo:
+
+``` html
+
+```
+
+### Realce de Sintaxe
+
+Atualmente existem realce de sintaxe \(ou [coloração de sintaxe](https://pt.wikipedia.org/wiki/Realce_de_sintaxe)\) suportado para [Sublime Text](https://github.com/vuejs/vue-syntax-highlight), [Atom](https://atom.io/packages/language-vue), [Vim](https://github.com/posva/vim-vue), [Visual Studio Code](https://marketplace.visualstudio.com/items/liuji-jim.vue), [Brackets](https://github.com/pandao/brackets-vue), e [JetBrains products](https://plugins.jetbrains.com/plugin/8057) \(WebStorm, PhpStorm, etc\). Contribuições para outros editores/IDEs são incentivadas e muito bem-vindas! Se você não estiver usando nenhum pré-processador em componentes Vue, você também pode tratar arquivos `*.vue` como HTML em seu editor.
+
+### Comentários
+
+Dentro de cada bloco você deve usar a sintaxe de comentário da linguagem que está sendo usada \(HTML, CSS, JavaScript, Jade, etc\). Para comentários de nível superior, use a sintaxe de comentário HTML: ``
\ No newline at end of file
diff --git a/docs/pt_BR/workflow/linting.md b/docs/pt_BR/workflow/linting.md
new file mode 100644
index 000000000..731d7bae6
--- /dev/null
+++ b/docs/pt_BR/workflow/linting.md
@@ -0,0 +1,93 @@
+# Análise estática do código \(Linting\)
+
+Você pode ter se perguntado como você analisa seu código dentro dos seus arquivos `*.vue`, uma vez que eles não são JavaScript. Vamos supor que você está usando [ESLint](http://eslint.org/) \(se você não está, deveria\).
+
+Você também precisará do [eslint-plugin-html](https://github.com/BenoitZugmeyer/eslint-plugin-html) que suporte de extração e análise estática \(linting\) do JavasScript dentro dos arquivos `*.vue`.
+
+Certifique-se de incluir o plugin dentro de suas configurações ESLint:
+
+```json
+"plugins": [
+ "html"
+]
+```
+
+Em seguida, a partir da linha de comando:
+
+```bash
+eslint --ext js,vue MeuComponente.vue
+```
+
+Outra opção é usar [eslint-loader](https://github.com/MoOx/eslint-loader) para que seus arquivos `*.vue` sejam automaticamente analisados ao serem salvo durante o desenvolvimento:
+
+```bash
+npm install eslint eslint-loader --save-dev
+```
+
+```js
+// webpack.config.js
+module.exports = {
+ // ... outras opções
+ module: {
+ loaders: [
+ {
+ test: /\.vue$/,
+ loader: 'vue!eslint'
+ }
+ ]
+ }
+}
+```
+
+Lembre-se que a sequência dos carregadores Webpack são aplicados da **direita para esquerda**. Certifique-se de aplicar `eslint` antes de `vue`, de modo que estamos analisando o código fonte pré-compilado.
+
+Uma coisa que precisamos considerar é o uso de componente `*.vue` de terceiros enviados em pacote NPM. Neste caso, usaremos `vue-loader` para processar os componentes de terceiros, mas não queremos aplicar a análise de código estático \(linting\). Para isso nós podemos separar o linting em [preLoaders](https://webpack.github.io/docs/loaders.html#loader-order) do Webpack.
+
+```js
+// webpack.config.js
+module.exports = {
+ // ... outras opções
+ module: {
+ // lint apenas em arquivos *.vue locais
+ preLoaders: [
+ {
+ test: /\.vue$/,
+ loader: 'eslint',
+ exclude: /node_modules/
+ }
+ ],
+ // mas usa vue-loader para todos arquivos *.vue
+ loaders: [
+ {
+ test: /\.vue$/,
+ loader: 'vue'
+ }
+ ]
+ }
+}
+```
+
+Para Webpack 2.x:
+
+```js
+// webpack.config.js
+module.exports = {
+ // ... outras opções
+ module: {
+ rules: [
+ // lint apenas em arquivos *.vue locais
+ {
+ enforce: 'pre',
+ test: /\.vue$/,
+ loader: 'eslint-loader',
+ exclude: /node_modules/
+ },
+ // mas usa vue-loader para todos arquivos *.vue
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader'
+ }
+ ]
+ }
+}
+```
\ No newline at end of file
diff --git a/docs/pt_BR/workflow/production.md b/docs/pt_BR/workflow/production.md
new file mode 100644
index 000000000..897becb39
--- /dev/null
+++ b/docs/pt_BR/workflow/production.md
@@ -0,0 +1,39 @@
+# Construir produção
+
+Há duas coisas a fazer ao construir nosso pacote para produção:
+
+1. Minificar o código de nossa aplicação;
+2. Use a [configuração descrita no guia Vue.js](https://vuejs.org/guide/deployment.html) para remover todos os avisos de código-fonte Vue.js;
+
+Aqui está um exemplo de configuração:
+
+```js
+// webpack.config.js
+module.exports = {
+ // ...outras opções
+ plugins: [
+ // liga em curto-circuito todo código de aviso Vue.js
+ new webpack.DefinePlugin({
+ 'process.env': {
+ NODE_ENV: '"production"'
+ }
+ }),
+ // minifica com eliminação de código morto
+ new webpack.optimize.UglifyJsPlugin({
+ compress: {
+ warnings: false
+ }
+ }),
+ // Webpack 1 apenas - otimiza ids de módulo por contagem de ocorrências
+ new webpack.optimize.OccurrenceOrderPlugin()
+ ]
+}
+```
+
+Obviamente não queremos usar estás configurações durante o desenvolvimento, então há várias maneiras de abordar isso:
+
+1. Crie dinamicamente o objeto de configuração com base em uma variável de ambiente.
+
+2. Ou use dois arquivos de configuração do Webpack separados, um para o desenvolvimento e outro para produção. E talvez compartilhe algumas opções comuns entre eles em um terceiro arquivo, como mostrado em [vue-hackernews-2.0](https://github.com/vuejs/vue-hackernews-2.0).
+
+Isto é com você, desde que o objetivo seja atingido.
diff --git a/docs/pt_BR/workflow/testing-with-mocks.md b/docs/pt_BR/workflow/testing-with-mocks.md
new file mode 100644
index 000000000..0b9193b45
--- /dev/null
+++ b/docs/pt_BR/workflow/testing-with-mocks.md
@@ -0,0 +1,70 @@
+# Testes com Mocks
+
+Em uma aplicação do mundo real, nossos componentes provavelmente tem uma dependência externa. Ao escrever testes de unidades para componentes, seria ideal se pudéssemos simular \(mock\) essas dependências externas de modo que nossos testes dependam apenas do comportamento do componente que está sendo testado.
+
+`vue-loader` fornece um recurso que permite você injetar dependências arbitrária para um componente `*.vue`, usando o [inject-loader](https://github.com/plasticine/inject-loader). A ideia geral é que, em vez de importar diretamente o módulo componente, nós usaremos `inject-loader` para criar uma função "fábrica de módulos" para este módulo. Quando está função é chamada com um objeto de mocks, ele retorna uma instância do módulo com os mocks injetados.
+
+Suponha que temos um componente como este:
+
+```html
+
+
+
{{ msg }}
+
+
+
+```
+
+Veja como importá-lo com simulações:
+
+> Nota: inject-loader@3.x está atualmente instável.
+
+```bash
+npm install inject-loader@^2.0.0 --save-dev
+```
+
+```js
+// exemplo.spec.js
+const ExemploInjecao = require('!!vue?inject!./exemplo.vue')
+```
+
+Observe que ele requer uma sequência de caracteres - nós estamos usando algumas [requisições de carregador webpack](https://webpack.github.io/docs/loaders.html) em linha aqui. Uma explicação rápida:
+
+- `!!` no início significa "desative todos os carregadores da configuração global";
+- `vue?inject!` significa "use o carregador de `vue`, e passe o `?inject` na consulta". Isso informa ao `vue-loader` para compilar o componente no modo injeção de dependência.
+
+O retorno de `ExemploInjecao` é uma função de fábrica que pode ser chamada para criar instâncias do módulo `exemplo.vue`.
+
+```js
+const ExemploComMocks = ExemploInjecao({
+ // simulação de serviço
+ '../servico': {
+ msg: 'Olá de uma simulação de serviço!'
+ }
+})
+```
+
+Finalmente, podemos testar o componente como de costume:
+
+```js
+it('Deve renderizar', () => {
+ const vm = new Vue({
+ template: '
',
+ components: {
+ 'test': ExemploComMocks
+ }
+ }).$mount()
+ expect(vm.$el.querySelector('.msg').textContent).toBe('Olá de uma simulação de serviço!')
+})
+```
\ No newline at end of file
diff --git a/docs/pt_BR/workflow/testing.md b/docs/pt_BR/workflow/testing.md
new file mode 100644
index 000000000..c911891af
--- /dev/null
+++ b/docs/pt_BR/workflow/testing.md
@@ -0,0 +1,101 @@
+# Testando
+
+> O [template vue-cli do webpack](https://github.com/vuejs-templates/webpack) oferece testes de unidade pré-configurados e configurações de teste es2 para você.
+
+Ao testar arquivos `*.vue` não podemos usar um corredor de teste simples baseado em CommonJs, porque ele não sabe como manipular arquivos `*.vue`. Em vez disso, nós ainda usaremos Webpack + vue-loader para manipular nossos arquivos de teste. A configuração recomendada é usando [Karma](http://karma-runner.github.io/0.13/index.html) e [karma-webpack](https://github.com/webpack/karma-webpack).
+
+Karma é um corredor de teste que inicia navegadores e executa seus testes. Você pode escolher qual navegador você quer para testar e qual framework \(exemplo: Mocha ou Jasmine\) você quer usar. Aqui está um exemplo de configuração Karma que executa os testes dentro de [PhantomJS](http://phantomjs.org/) com o framework de teste [Jasmine](http://jasmine.github.io/edge/introduction.html).
+
+```bash
+npm install\
+ karma karma-webpack\
+ karma-jasmine jasmine-core\
+ karma-phantomjs-launcher phantomjs\
+ --save-dev
+```
+
+```js
+// podemos usar a mesma configuração que é exigida pelo webpackm
+// entretanto, lembre-se de remover a entrada original, uma vez
+// que não precisamo durante os testes
+var webpackConfig = require('./webpack.config.js')
+delete webpackConfig.entry
+
+// karma.conf.js
+module.exports = function (config) {
+ config.set({
+ browsers: ['PhantomJS'],
+ frameworks: ['jasmine'],
+ // este é o arquivo de entrada para todos os nossos testes
+ files: ['test/index.js'],
+ // vamos passar o arquivo de entrada para webpack empacotar
+ preprocessors: {
+ 'test/index.js': ['webpack']
+ },
+ // use a configuração do webpack
+ webpack: webpackConfig,
+ // evita pedaços de texto inúteis
+ webpackMiddleware: {
+ noInfo: true
+ },
+ singleRun: true
+ })
+}
+```
+
+E para o arquivo `test/index.js` de entrada:
+
+```js
+// test/index.js
+// requisita todos os arquivos de testes usando 0 recursos especial do Webpack
+// https://webpack.github.io/docs/context.html#require-context
+var testsContext = require.context('.', true, /\.spec$/)
+testsContext.keys().forEach(testsContext)
+```
+
+Este recurso de entrada simplesmente requisita todos os outros arquivos na pasta que terminam com `.spec.js`. Agora podemos realmente escrever alguns testes:
+
+```js
+// test/component-a.spec.js
+var Vue = require('vue')
+var ComponentA = require('../../src/components/a.vue')
+
+describe('a.vue', function () {
+
+ // Opções JavaScript de afirmação (asserting)
+ it('should have correct message', function () {
+ expect(ComponentA.data().msg).toBe('Olá do componente A!')
+ })
+
+ // Afirmando o resultado renderizado fornecido pelo componente
+ it('should render correct message', function () {
+ var vm = new Vue({
+ template: '
',
+ components: {
+ 'test': ComponentA
+ }
+ }).$mount()
+ expect(vm.$el.querySelector('h2.red').textContent).toBe('Olá do componente A!')
+ })
+})
+```
+
+Para executar os testes, adicione o seguinte script NPM:
+
+```js
+// package.json
+...
+"scripts": {
+ ...
+ "test": "karma start karma.conf.js"
+}
+...
+```
+
+Finalmente execute:
+
+```bash
+npm test
+```
+
+Novamente, [template vue-cli webpack](https://github.com/vuejs-templates/webpack) contém um exemplo totalmente funcional com testes.
\ No newline at end of file
diff --git a/docs/ru/README.md b/docs/ru/README.md
index 548a12ef4..4b8ddbde5 100644
--- a/docs/ru/README.md
+++ b/docs/ru/README.md
@@ -1,41 +1,38 @@
# Введение
-:::tip ПРИМЕЧАНИЕ К ВЕРСИИ
-Это документация для Vue Loader v15 и выше. Если вы обновляетесь с v14 или более ранних версий, обратитесь к [руководству по миграции](./migrating.md). Если вы используете старую версию, то документация к ней [здесь](https://vue-loader-v14.vuejs.org).
-:::
-
-## Что такое Vue Loader?
-
-`vue-loader` — это загрузчик для [webpack](https://webpack.js.org/), который позволяет вам использовать компоненты Vue в формате, именуемым [однофайловыми компонентами](./spec.md):
-
-``` vue
-
-
{{ msg }}
-
-
-
-
-
-```
-
-Использование `vue-loader` предоставляет множество интересных возможностей:
-
-- Позволяет использовать разнообразные загрузчики webpack для разных секций компонента Vue, например Sass для `
+```
+
+#### webpack.config.js
+
+``` js
+// Webpack 2.x
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ // извлечь всё содержимое тегов как обычный текст
+ 'docs': ExtractTextPlugin.extract('raw-loader'),
+ }
+ }
+ }
+ ]
+ },
+ plugins: [
+ // вывести всю документацию в отдельный файл
+ new ExtractTextPlugin('docs.md')
+ ]
+}
+```
+
+## Документация доступная во время выполнения
+
+Вот пример того, как можно встроить пользовательские блоки `` в компонент, чтобы он был доступен во время выполнения.
+
+#### docs-loader.js
+
+Для инъекции содержимого пользовательского блока понадобится пользовательский загрузчик:
+
+``` js
+module.exports = function (source, map) {
+ this.callback(null, 'module.exports = function(Component) {Component.options.__docs = ' +
+ JSON.stringify(source) +
+ '}', map)
+}
+```
+
+#### webpack.config.js
+
+Теперь необходимо настроить Webpack использовать наш загрузчик для пользовательских блоков ``.
+
+``` js
+const docsLoader = require.resolve('./custom-loaders/docs-loader.js')
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ 'docs': docsLoader
+ }
+ }
+ }
+ ]
+ }
+}
+```
+
+#### component.vue
+
+Теперь мы можем получить доступ к содержимому блока `` импортированного компонента на этапе выполнения.
+
+``` html
+
+
+
+
{{ docs }}
+
+
+
+
+```
diff --git a/docs/ru/configurations/extract-css.md b/docs/ru/configurations/extract-css.md
new file mode 100644
index 000000000..e092e87bb
--- /dev/null
+++ b/docs/ru/configurations/extract-css.md
@@ -0,0 +1,103 @@
+# Извлечение CSS в отдельный файл
+
+``` bash
+npm install extract-text-webpack-plugin --save-dev
+```
+
+## Простой путь
+
+> требуется vue-loader@^12.0.0 и webpack@^2.0.0
+
+``` js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // другие настройки...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ extractCSS: true
+ }
+ }
+ ]
+ },
+ plugins: [
+ new ExtractTextPlugin("style.css")
+ ]
+}
+```
+
+Указанный выше пример будет автоматически обрабатывать извлечение `
+```
+
+В недрах, текстовое содержимое тега `
+```
+
+Обратите внимание, это сделает ваш компонент Vue зависимым от Webpack и несовместимым с Browserify и [vueify](https://github.com/vuejs/vueify). **Если вы планируете распространять ваш компонент Vue, избегайте использования этого синтаксиса.**
diff --git a/docs/ru/features/css-modules.md b/docs/ru/features/css-modules.md
new file mode 100644
index 000000000..d73760a90
--- /dev/null
+++ b/docs/ru/features/css-modules.md
@@ -0,0 +1,117 @@
+# CSS модули
+
+> требуется версия 9.8.0 или выше
+
+[CSS модули](https://github.com/css-modules/css-modules) — это популярная система для модульности и компоновки CSS. `vue-loader` предоставляет первоклассную интеграцию с CSS модулями как возможную альтернативу эмулируемого scoped CSS.
+
+### Использование
+
+Просто добавьте атрибут `module` к тегу `
+```
+
+Это включит режим CSS-модулей в `css-loader`, и полученный индентификатор объекта класса будет внедрен в компонент как вычисляемое свойство с именем `$style`. Вы можете использовать его в своих шаблонах для динамического добавления классов:
+
+``` html
+
+
+ Этот текст будет красным
+
+
+```
+
+Поскольку это вычисляемое свойство, оно также будет работает с объектом/массивом в `:class`:
+
+``` html
+
+
+
+ Буду ли я красным?
+
+
+ Красный и жирный
+
+
+
+```
+
+Вы также можете получить доступ в JavaScript:
+
+``` html
+
+```
+
+Обратитесь к [спецификации CSS-модулей](https://github.com/css-modules/css-modules) для получения информации о [глобальных исключениях](https://github.com/css-modules/css-modules#exceptions) и [композиции](https://github.com/css-modules/css-modules#composition).
+
+### Указание внедряемого имени модуля
+
+У вас может быть более одного `
+
+
+```
+
+### Настройка параметров `css-loader`
+
+CSS-модули обрабатываются с помощью [css-loader](https://github.com/webpack/css-loader). При использовании `
+
+
+
hi
+
+```
+
+В что-то подобное:
+
+``` html
+
+
+
+
hi
+
+```
+
+#### Примечания
+
+1. Вы можете использовать в компоненте локальные и глобальные стили одновременно:
+
+ ``` html
+
+
+
+ ```
+
+2. Корневой тег компонента потомка будет попадать под область видимости родительского локального CSS и своего локального CSS.
+
+3. Partials не затрагиваются локальными стилями.
+
+4. **Локальные стили не устраняют необходимость классов**. Из-за того как браузеры рендерят различные CSS-селекторы, `p { color: red }` может быть в разы медленнее при использовании в локальных стилях (например, когда комбинируется с селектором по атрибуту). Если же вы используете классы или ID, такие как `.example { color: red }`, тогда вы практически полностью исключаете ухудшение производительности. [Вот пример](http://stevesouders.com/efws/css-selectors/csscreate.php) где вы можете проверить разницу самостоятельно.
+
+5. **Будьте внимательны с селекторами потомков в рекурсивных компонентах!** Для CSS-правила с селектором `.a .b`, если элемент, который соответствует `.a` содержит рекурсивный компонент потомок, тогда все `.b` в этом компоненте потомке будут также соответствовать правилу.
diff --git a/docs/ru/guide/README.md b/docs/ru/guide/README.md
deleted file mode 100644
index bdcb76b02..000000000
--- a/docs/ru/guide/README.md
+++ /dev/null
@@ -1,92 +0,0 @@
-# Начало работы
-
-## Vue CLI
-
-Если вы не заинтересованы настраивать вручную webpack, тогда мы рекомендуем вам разворачивать проекты с помощью [Vue CLI](https://github.com/vuejs/vue-cli). Проекты создаваемые с помощью Vue CLI предварительно сконфигурированы с учётом большинства общих потребностей при разработке из коробки.
-
-Следуйте этому руководству, если встроенная конфигурация Vue CLI не подходит для ваших нужд, или вы предпочитаете создавать собственную конфигурацию webpack с нуля.
-
-## Настройка вручную
-
-### Установка
-
-Если вы не продвинутый пользователь, использующий собственную форкнутую версию компилятора шаблонов Vue, то должны установить `vue-loader` и `vue-template-compiler` вместе:
-
-``` bash
-npm install -D vue-loader vue-template-compiler
-```
-
-Причина, по которой `vue-template-compiler` требуется устанавливать отдельно в том, что можно отдельно указать его версию.
-
-Каждый раз, когда выходит новая версия `vue`, выпускается и соответствующая версия `vue-template-compiler`. Версия компилятора должна быть аналогичной версии базового пакета `vue`, чтобы `vue-loader` генерировал код совместимый с runtime. Поэтому **каждый раз, когда вы обновляете `vue` в проекте, вы должны также обновить и `vue-template-compiler` до такой же версии.**
-
- ### Конфигурация webpack
-
-Конфигурация Vue Loader немного отличается от настройки других загрузчиков. В дополнении к правилу, которое будет применять `vue-loader` ко всем файлам с расширением `.vue`, убедитесь что добавили плагин Vue Loader в вашу конфигурацию webpack:
-
-``` js
-// webpack.config.js
-const { VueLoaderPlugin } = require('vue-loader')
-
-module.exports = {
- module: {
- rules: [
- // ... другие правила
- {
- test: /\.vue$/,
- loader: 'vue-loader'
- }
- ]
- },
- plugins: [
- // убедитесь что подключили плагин!
- new VueLoaderPlugin()
- ]
-}
-```
-
-**Плагин необходим!** Он отвечает за клонирование любых других правил, которые вы определили, чтобы применить их к соответствующим языковым блокам в файлах `.vue`. Например, если у вас есть правило, соответствующее файлам `/\.js$/`, оно будет применяться к секциям `
-```
-
-Обратитесь к [спецификации CSS-модулей](https://github.com/css-modules/css-modules) для получения информации о [глобальных исключениях](https://github.com/css-modules/css-modules#exceptions) и [композиции](https://github.com/css-modules/css-modules#composition).
-
-## Опциональное использование
-
-Если вы хотите использовать CSS модули только в некоторых компонентах Vue, вы можете использовать правило `oneOf` и проверять наличие строки `module` внутри `resourceQuery`:
-
-``` js
-// webpack.config.js -> module.rules
-{
- test: /\.css$/,
- oneOf: [
- // это соответствует `
-
-
-```
diff --git a/docs/ru/guide/custom-blocks.md b/docs/ru/guide/custom-blocks.md
deleted file mode 100644
index 6ac91f677..000000000
--- a/docs/ru/guide/custom-blocks.md
+++ /dev/null
@@ -1,94 +0,0 @@
-# Пользовательские блоки
-
-Вы можете определять пользовательские блоки внутри файлов `*.vue`. Загрузчики, применяемые к такому блоку, будут определяться сопоставлением по атрибуту `lang` блока, имени тега блока, и правил в вашей конфигурации webpack.
-
-Если указан атрибут `lang`, пользовательский блок будет обработан как файл с расширением, указанном в `lang`.
-
-Вы также можете использовать `resourceQuery` для определения правила для блока без атрибута `lang`. Например, для сопоставления пользовательского блока ``:
-
-```js
-{
- module: {
- rules: [
- {
- resourceQuery: /blockType=foo/,
- loader: "loader-to-use"
- }
- ];
- }
-}
-```
-
-Если для пользовательского блока будет найдено правило — он будет им обработан; в противном случае пользовательский блок будет тихо проигнорирован.
-
-Кроме того, если пользовательский блок экспортирует функцию в качестве конечного результата после обработки всеми соответствующими загрузчиками, то эта функция будет вызываться с компонентом файла `*.vue` в качестве параметра.
-
-## Пример
-
-Небольшой пример внедрения пользовательского блока `` в компонент таким образом, что он будет доступен во время выполнения.
-
-Для внедрения содержимого пользовательского блока мы напишем собственный загрузчик:
-
-```js
-module.exports = function(source, map) {
- this.callback(
- null,
- `export default function (Component) {
- Component.options.__docs = ${JSON.stringify(source)}
- }`,
- map
- );
-};
-```
-
-Настроим webpack использовать наш загрузчик для пользовательских блоков ``.
-
-```js
-// wepback.config.js
-module.exports = {
- module: {
- rules: [
- {
- resourceQuery: /blockType=docs/,
- loader: require.resolve("./docs-loader.js")
- }
- ]
- }
-};
-```
-
-Теперь мы можем получить доступ к содержимому блока `` импортированного компонента на этапе выполнения.
-
-```vue
-
-
-
Hello
-
-
-
-This is the documentation for component B.
-
-```
-
-```vue
-
-
-
-
-
{{ docs }}
-
-
-
-
-```
diff --git a/docs/ru/guide/extract-css.md b/docs/ru/guide/extract-css.md
deleted file mode 100644
index 94f61d36d..000000000
--- a/docs/ru/guide/extract-css.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# Извлечение CSS в отдельный файл
-
-::: tip СОВЕТ
-Применяйте извлечение CSS в отдельный файл только в production, чтобы использовать горячую перезагрузку CSS на этапе разработки.
-:::
-
-## webpack 4
-
-``` bash
-npm install -D mini-css-extract-plugin
-```
-
-``` js
-// webpack.config.js
-var MiniCssExtractPlugin = require('mini-css-extract-plugin')
-
-module.exports = {
- // другие настройки...
- module: {
- rules: [
- // ... другие правила опущены
- {
- test: /\.css$/,
- use: [
- process.env.NODE_ENV !== 'production'
- ? 'vue-style-loader'
- : MiniCssExtractPlugin.loader,
- 'css-loader'
- ]
- }
- ]
- },
- plugins: [
- // ... плагин Vue Loader опущен
- new MiniCssExtractPlugin({
- filename: 'style.css'
- })
- ]
-}
-```
-
-Также смотрите [документацию mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin).
-
-## webpack 3
-
-``` bash
-npm install -D extract-text-webpack-plugin
-```
-
-``` js
-// webpack.config.js
-var ExtractTextPlugin = require("extract-text-webpack-plugin")
-
-module.exports = {
- // другие настройки...
- module: {
- rules: [
- // ... другие правила опущены
- {
- test: /\.css$/,
- loader: ExtractTextPlugin.extract({
- use: 'css-loader',
- fallback: 'vue-style-loader'
- })
- }
- ]
- },
- plugins: [
- // ... плагин Vue Loader опущен
- new ExtractTextPlugin("style.css")
- ]
-}
-```
-
-Также смотрите [документацию extract-text-webpack-plugin](https://github.com/webpack-contrib/extract-text-webpack-plugin).
diff --git a/docs/ru/guide/functional.md b/docs/ru/guide/functional.md
deleted file mode 100644
index 421979506..000000000
--- a/docs/ru/guide/functional.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Функциональные компоненты
-
-Функциональные компоненты, объявленные как однофайловые компоненты в файле `*.vue`, также получают правильную поддержку компиляции шаблона, локальный CSS и поддержку горячей перезагрузки.
-
-Чтобы обозначить шаблон, который должен быть скомпилирован как функциональный компонент, добавьте атрибут `functional` в тег шаблона. Это также позволяет опустить опцию `functional` в теге `
-
-
-
-
- Это может быть, например, документация для компонента
-
-```
-
-`vue-loader` парсит файл, извлекает каждую из секций, обрабатывает их при необходимости другими загрузчиками webpack, и в итоге собирает всё обратно в ES-модуль где экспорт по умолчанию будет объектом настроек компонента Vue.js.
-
-`vue-loader` предоставляет возможность использовать нестандартные языки, например пре-процессоры CSS и языки шаблонов компилируемые в HTML, указывая атрибут `lang` для секции файла. Например, вы можете использовать Sass для стилей вашего компонента:
-
-``` vue
-
-```
-
-Подробнее на странице [использования пре-процессоров](./guide/pre-processors.md).
-
-## Секции файла
-
-### Шаблон (template)
-
-- Каждый `*.vue` файл может содержать максимум один блок ``.
-
-- Содержимое извлекается, передаётся в `vue-template-compiler`, где предварительно будет скомпилировано в JavaScript render-функции, и наконец внедряется в описываемый компонент в секции `
-```
-
-Обратите внимание, что импорты через `src` следуют тем же правилам webpack по разрешению путей к модулям, что означает:
-
-- Относительные пути должны начинаться с `./`
-- Вы можете импортировать ресурсы из npm-зависимостей:
-
-``` vue
-
-
+
+
+ Это может быть, например, документация для компонента
+
+```
+
+`vue-loader` парсит файл, извлекает каждую из секций, обрабатывает их при необходимости другими loader'ами, и в итоге собирает всё обратно в модуль CommonJS где `module.exports` будет объектом настроек компонента Vue.js.
+
+`vue-loader` предоставляет возможность использовать нестандартные языки, например пре-процессоры CSS и языки шаблонов компилируемые в HTML просто указав атрибут `lang` для секции файла. Например, вы можете использовать SASS для стилей вашего компонента:
+
+``` html
+
+```
+
+Подробнее на странице [использования пре-процессоров](../configurations/pre-processors.md).
+
+### Секции файла
+
+#### ``
+
+- Язык по умолчанию: `html`.
+
+- Каждый `*.vue` файл может содержать максимум один блок ``.
+
+- Содержимое будет извлечено как строка и использовано как опция `template` для скомпилированного компонента Vue.
+
+#### `
+```
+
+Имейте ввиду, что импорт через `src` следует тем же правилам определения пути к файлу, как и вызовы `require()` в CommonJS, что означает необходимость начинать относительные пути с `./`, и также возможность подключать ресурсы непосредственно из установленных NPM-пакетов, например:
+
+``` html
+
+
-
-
- This could be e.g. documentation for the component.
-
-```
-
-`vue-loader` will parse the file, extract each language block, pipe them through other loaders if necessary, and finally assemble them back into an ES Module whose default export is a Vue.js component options object.
-
-`vue-loader` supports using non-default languages, such as CSS pre-processors and compile-to-HTML template languages, by specifying the `lang` attribute for a language block. For example, you can use Sass for the style of your component like this:
-
-``` vue
-
-```
-
-More details can be found in [Using Pre-Processors](./guide/pre-processors.md).
-
-## Language Blocks
-
-### Template
-
-- Each `*.vue` file can contain at most one `` block at a time.
-
-- Contents will be extracted and passed on to `vue-template-compiler` and pre-compiled into JavaScript render functions, and finally injected into the exported component in the `
-```
-
-Beware that `src` imports follow the same path resolution rules to webpack module requests, which means:
-
-- Relative paths need to start with `./`
-- You can import resources from npm dependencies:
-
-``` vue
-
-
+```
+
+#### webpack.config.js
+
+``` js
+// Webpack 2.x
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue',
+ options: {
+ loaders: {
+ // 提取 中的内容为原始文本
+ 'docs': ExtractTextPlugin.extract('raw-loader'),
+ }
+ }
+ }
+ ]
+ },
+ plugins: [
+ // 输出 docs 到当个文件中
+ new ExtractTextPlugin('docs.md')
+ ]
+}
+```
diff --git a/docs/zh-cn/configurations/extract-css.md b/docs/zh-cn/configurations/extract-css.md
new file mode 100644
index 000000000..531360816
--- /dev/null
+++ b/docs/zh-cn/configurations/extract-css.md
@@ -0,0 +1,104 @@
+# 提取 CSS 到单个文件
+
+``` bash
+npm install extract-text-webpack-plugin --save-dev
+```
+
+## 简单的方法
+
+> requires vue-loader@^12.0.0 and webpack@^2.0.0
+
+``` js
+// webpack.config.js
+var ExtractTextPlugin = require("extract-text-webpack-plugin")
+
+module.exports = {
+ // other options...
+ module: {
+ rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader',
+ options: {
+ extractCSS: true
+ }
+ }
+ ]
+ },
+ plugins: [
+ new ExtractTextPlugin("style.css")
+ ]
+}
+```
+
+上述内容将自动处理 `*.vue` 文件内的 `
+```
+
+在内部,`
+```
+
+但是,这使你的 Vue 组件只适用于 Webpack,不能与 Browserify and [vueify](https://github.com/vuejs/vueify) 一同使用。**如果你打算将你的 Vue 组件作为可重复使用的第三方组件,请避免使用这个语法。**
diff --git a/docs/zh-cn/features/css-modules.md b/docs/zh-cn/features/css-modules.md
new file mode 100644
index 000000000..24a689081
--- /dev/null
+++ b/docs/zh-cn/features/css-modules.md
@@ -0,0 +1,117 @@
+# CSS 模块
+
+> 需要 ^9.8.0
+
+[CSS 模块](https://github.com/css-modules/css-modules) 是一个用于模块化和组合 CSS的流行系统。`vue-loader` 提供了与 CSS 模块的一流集成,可以作为模拟 CSS 作用域的替代方案。
+
+### 使用
+
+在你的 `
+```
+
+这将为 `css-loader` 打开 CSS 模块模式,生成的 CSS 对象将为组件注入一个名叫 `$style` 的计算属性,你可以在你的模块中使用动态 class 绑定:
+
+``` html
+
+