자산 편집 편집
소개
- 노드 설치
- Run Mix
- 리소스 변경 듣기
- 스타일 시트 사용
- Less Stylus
- PostCSS Vanilla JS
- 사용자 정의 Webpack 구성
- 사용자 정의 구성 병합
- 구성 파일 자체 정의
- 파일 및 디렉터리 복사 환경 변수
- Notification
컴파일 리소스(믹스)
- 소개
- 설치 및 설정
- 믹스 실행
- 스타일 시트 사용
- JavaScript 사용
- 추출 공급업체
- React
- Vanilla JS
- 맞춤 설정 Webpack 구성
- 파일 및 디렉터리 복사
- 버전 제어/캐시 지우기
- Browsersync Reload
- 환경 변수
- 알림
node -v npm -v
기본적으로 Laravel Homestead에는 필요한 모든 것이 포함되어 있지만 Vagrant를 사용하는 경우다운로드 페이지에서 제공되는 사용하기 쉬운 그래픽 설치 프로그램을 사용하여 최신 버전의 Node 및 NPM을 설치할 수도 있습니다.
Laravel Mix 남은 것은 Laravel Mix를 설치하는 것뿐입니다. Laravel을 새로 설치하면파일은 PHP가 아닌 Node에 대한 종속성을 정의한다는 점을 제외하고 디렉터리 구조의 루트에서 찾을 수 있습니다. 다음 명령을 실행하여 참조하는 종속성을 설치합니다.
package.json
文件。默认的package.json
文件包含了起步所需的所有东西,把它想像成composer.json
npm install
Running Mix
Mix는 Webpack의 최상위 구성이므로 Mix 작업을 실행하려면 Laravel의 기본
package.json
파일에 포함된 스크립트만 실행하면 됩니다.package.json
文件中的脚本:// 运行 Mix 任务... npm run dev // 运行所有的 Mix 任务并最小化输出结果... npm run production
监听资源变化
npm run watch
命令能够在终端持续运行并且监听相关文件的变化。一旦它发现改变,Webpack 将自动重新编译资源:npm run watch
你会发现在特定环境下,文件发生改变并不会促使 Webpack 更新。如果系统中出现这种情况,不妨考虑使用
watch-poll
命令:npm run watch-poll
使用样式表
webpack.mix.js
文件所有资源编译的切入点。把它想像为 Webpack 的轻量级配置封装。Mix 任务可以与如何编译资源的配置一起被链式调用。Less
less
方法可用于将 Less 编译成 CSS。下面的语句将app.less
文件编译为public/css/app.css
:mix.less('resources/less/app.less', 'public/css');
可以通过多次调用
less
方法完成多文件编译:mix.less('resources/less/app.less', 'public/css') .less('resources/less/admin.less', 'public/css');
如果希望自定义编译后的 CSS 文件名,可以把完整的文件路径作为传递给
less
方法的第二个参数:mix.less('resources/less/app.less', 'public/stylesheets/styles.css');
如果需要覆盖 隐含的 Less 插件选项 ,可以传递一个对象作为
mix.less()
的第三个参数:mix.less('resources/less/app.less', 'public/css', { strictMath: true });
Sass
sass
方法能将 Sass 编译成 CSS。可以像下面这样使用这个方法:mix.sass('resources/sass/app.scss', 'public/css');
和
less
方法类似,可以将多个 Sass 文件编译为各自的 CSS 文件,并为结果 CSS 自定义输出目录:mix.sass('resources/sass/app.sass', 'public/css') .sass('resources/sass/admin.sass', 'public/css/admin');
额外的 Node-Sass 插件选项 可以作为第三个参数:
mix.sass('resources/sass/app.sass', 'public/css', { precision: 5 });
Stylus
与 Less 和 Sass 相似,
stylus
方法将 Stylus 编译成 CSS:mix.stylus('resources/stylus/app.styl', 'public/css');
还可以安装额外的 Stylus 插件,比如 Rupture 。先通过 NPM (
npm install rupture
)安装有插件,然后在调用mix.stylus()
mix.stylus('resources/stylus/app.styl', 'public/css', { use: [ require('rupture')() ] });
리소스 변경 수신
npm run watch
명령은 터미널 및 모니터에서 계속 실행될 수 있습니다. 관련 파일의 변경. Webpack은 변경 사항을 감지하면 자동으로 리소스를 다시 컴파일합니다.mix.sass('resources/sass/app.scss', 'public/css') .options({ postCss: [ require('postcss-css-variables')() ] });
특정 상황에서는 파일을 변경해도 Webpack 업데이트 메시지가 표시되지 않는 경우가 있습니다. 시스템에서 이러한 상황이 발생하면watch-poll
명령 사용을 고려할 수 있습니다:mix.styles([ 'public/css/vendor/normalize.css', 'public/css/vendor/videojs.css'], 'public/css/all.css' );
🎜🎜🎜스타일 시트 사용🎜🎜webpack.mix.js
파일은 모든 리소스를 컴파일하기 위한 진입점입니다. Webpack을 위한 경량 구성 래퍼라고 생각하세요. 혼합 작업은 리소스 컴파일 방법 구성과 함께 연결될 수 있습니다. 🎜🎜🎜🎜🎜Less
🎜less
방법을 사용하면 됩니다. < a href="http://lesscss.org/">Less🎜 컴파일을 CSS로 변환합니다. 다음 문은app.less
파일을public/css/app.css
로 컴파일합니다. 🎜.example { background: url('../images/example.png'); }
🎜이 작업은less
를 호출하여 수행할 수 있습니다. 다중 파일 컴파일: 🎜.example { background: url(/images/example.png?d41d8cd98f00b204e9800998ecf8427e); }
🎜컴파일된 CSS 파일 이름을 사용자 정의하려면 전체 파일 경로를less
메서드의 두 번째 매개변수로 전달할 수 있습니다. 🎜mix.sass('resources/app/app.scss', 'public/css') .options({ processCssUrls: false });
🎜 암시적 Less 플러그인 옵션🎜을 재정의해야 하는 경우 개체를mix의 세 번째 요소로 전달할 수 있습니다. less()
매개변수: 🎜.example { background: url("../images/thing.png"); }
🎜🎜🎜🎜Sass
🎜sass
메소드 Sass🎜를 CSS로 컴파일할 수 있습니다. 이 방법을 다음과 같이 사용할 수 있습니다. 🎜mix.js('resources/js/app.js', 'public/js') .sourceMaps();
🎜less
방법과 유사하며 여러 Sass 파일을 자체 CSS 파일로 컴파일하고 결과 CSS의 출력 디렉터리를 사용자 정의할 수 있습니다. 🎜mix.js('resources/js/app.js', 'public/js');
🎜Extra < a href="https://github.com/sass/node-sass#options">Node-Sass 플러그인 옵션 🎜을 세 번째 매개변수로 사용할 수 있습니다: 🎜mix.js('resources/js/app.js', 'public/js') .extract(['vue'])
🎜🎜🎜🎜스타일러스
🎜 Less 및 Sass와 유사하게stylus
메소드는 Stylus🎜가 CSS로 컴파일되었습니다: 🎜<script src="/js/manifest.js"></script> <script src="/js/vendor.js"></script> <script src="/js/app.js"></script>
🎜 Rupture🎜와 같은 추가 스타일러스 플러그인을 설치할 수도 있습니다. 먼저 NPM을 통해 플러그인을 설치한 다음(npm install rupture
),mix.stylus()
를 호출할 때 포함하세요. 🎜mix.react('resources/js/app.jsx', 'public/js');
🎜🎜🎜🎜🎜🎜PostCSS
PostCSS은 CSS 변환을 위한 강력한 도구이며 이미 Laravel Mix에 포함되어 있습니다. 기본적으로 Mix는 널리 사용되는 Autoprefixer 플러그인을 사용하여 필요한 모든 CSS3 타사 접두사를 자동으로 추가합니다. 그러나 앱에 원하는 추가 플러그인을 자유롭게 추가할 수 있습니다. 먼저 NPM을 통해 필요한 플러그인을 설치한 다음
webpack.mix.js
파일에서 이를 참조합니다:webpack.mix.js
文件引用:mix.scripts([ 'public/js/admin.js', 'public/js/dashboard.js'], 'public/js/all.js' );
原生 CSS
如果想要将几个原生 CSS 样式表合并到单个文件中,可以使用
styles
方法。mix.webpackConfig({ resolve: { modules: [ path.resolve(__dirname, 'vendor/laravel/spark/resources/assets/js') ] } } );
URL 处理
因为是基于 Webpack 之上构建,了解几个 Webpack 概念就很重要了。对于 CSS 编译,Webpack 将重写和优化任何带有样式表的
url()
调用。虽然初听上去好像很奇怪,但这确实是个强大的功能。 想像一下我们想要编译包含图片相对 URL 的 Sass:mix.copy('node_modules/foo/bar.css', 'public/css/bar.css');
{note} 任何给定
url()
的绝对路径将被排除在 URL 重写之外。例如url('/images/thing.png')
或url('http://example.com/images/thing.png')
将不会被修改。默认情况下,Laravel Mix 和 Webpack 将找到
example.png
, 将其复制到public/images
文件夹,然后重写生成的样式表中的url()
。如此一平,编译后的 CSS 将变成:mix.copyDirectory('resources/img', 'public/img');
尽管此功能可能很有用,但是已有文件夹结构可能已经按你的预期做了配置。这种情况下,你可以禁用
url()
重写:mix.js('resources/js/app.js', 'public/js') .version();
在
webpack.mix.js
文件中加入这项配置,Mix 将不再匹配任何url()
或者复制资源到 public 目录。换句话说,编译后的 CSS 看上去和你原来输入的内容一样:<script src="{{ mix('/js/app.js') }}"></script>
源码映射
虽然默认情况下源码映射被禁用,但是可以通过在
webpack.mix.js
文件中调用mix.sourceMaps()
mix.js('resources/js/app.js', 'public/js'); if (mix.inProduction()) { mix.version(); }
Native CSS여러 기본 CSS 스타일시트를 단일 파일로 결합하려는 경우styles
방법을 사용할 수 있습니다. 🎜mix.browserSync('my-domain.test'); // 或... // https://browsersync.io/docs/options mix.browserSync({ proxy: 'my-domain.test' });
🎜🎜🎜🎜🎜URL 처리🎜🎜Webpack을 기반으로 제작되었기 때문에 몇 가지 Webpack 개념만 이해하면 충분합니다. 매우 중요. CSS 컴파일의 경우 Webpack은 스타일시트를 사용하여 모든url()
호출을 다시 작성하고 최적화합니다. 처음에는 이상하게 들릴 수도 있지만 이는 강력한 기능입니다. 이미지에 대한 상대 URL이 포함된 Sass를 컴파일한다고 가정해 보세요. 🎜MIX_SENTRY_DSN_PUBLIC=http://example.com
🎜{note}
🎜기본적으로 Laravel Mix와 Webpack은url()
에 지정된 절대 경로는 URL 재작성에서 제외됩니다. 예를 들어url('/images/thing.png')
또는url('http://example.com/images/thing.png')
는 그렇지 않습니다. 수정되었습니다. 🎜example.png
를 찾아public/images
폴더에 복사한 다음 생성된 스타일을 재정의합니다. >url()을 테이블에 추가하세요. 이 작업이 완료되면 컴파일된 CSS는 다음과 같습니다. 🎜process.env.MIX_SENTRY_DSN_PUBLIC
🎜 이 기능은 유용할 수 있지만 기존 폴더 구조는 이미 예상한 대로 구성되어 있을 수 있습니다. 이 경우url()
재작성을 비활성화할 수 있습니다. 🎜mix.disableNotifications();
🎜webpack.mix.js
파일에 이 구성을 추가하면 Mix는 더 이상 어떤 것과도 일치하지 않습니다. >url() 또는 리소스를 공용 디렉터리에 복사합니다. 즉, 컴파일된 CSS는 원래 입력한 것과 동일해 보입니다. 🎜rrreee🎜🎜🎜🎜🎜 소스 맵🎜🎜소스 맵은 기본적으로 비활성화되어 있지만webpack.mix.js
파일에서mix.sourceMaps()
메서드를 호출하여 활성화할 수 있습니다. 컴파일/실행 비용이 증가하지만 리소스를 컴파일할 때 브라우저 개발 도구에 추가 디버깅 정보를 제공할 수 있습니다. 🎜rrreee🎜🎜🎜🎜🎜🎜JavaScript 작업
Mix는 ECMAScript 2015 컴파일, 모듈 패키징, 기본 JavaScript 파일 최소화 및 병합 등 JavaScript 파일 작업을 용이하게 하는 여러 기능을 제공합니다. 더 좋은 점은 이 모든 것이 별도의 구성 없이도 훌륭하게 작동한다는 것입니다.
rrreee이 코드 줄만으로 다음을 지원할 수 있습니다.
- ES2015 구문
- module
-
.vue
파일을 컴파일하세요..vue
文件。 - 为生产环境最小化代码。
Vendor 提取
将应用自身的 JavaScript 和第三方库绑定在一起有个潜在的缺点:会使长期缓存变得困难。例如,应用代码的单独更新将强制浏览器重新下载全部第三方库,即使第三方库没有发生变化。
如果你打算频繁地更新应用中的 JavaScript,应该考虑将第三方库提取到它自己的文件中。这样一来,应用代码的改变将不影响
rrreeevendor.js
文件缓存。Mix 的extract
方法为之提供了便利:extract
方法接受你想要提取到vendor.js
的全部库或模块的数组作为参数。使用上面例子中的代码片段,Mix 将生成如下文件:public/js/manifest.js
: Webpack 运行时清单public/js/vendor.js
: 第三方库代码public/js/app.js
: 应用代码
为避免 JavaScript 错误,应确保按适应顺序加载这些文件:
rrreeeReact
Mix 能自动安装 React 支持所需的 Babel 插件。要达成此目的,只需要用
rrreeemix.react()
替换mix.js()
:Mix 将在后台下载并包含适用的
babel-preset-react
Babel 插件。Vanilla JS
与利用
rrreeemix.styles()
整合样式表类似,你也可以使用scripts()
方法整合并最小化任意数量的 JavaScript 文件:对于不需要使用 Webpack 编译 JavaScript 的遗留代码,这个选项尤其有用。
{tip}
프로덕션 환경을 위해 코드를 최소화하세요.mix.babel()
是mix.scripts()
的一个小变种。它的方法签名与scripts
은 자체 JavaScript를 적용합니다. 타사 라이브러리와 번들링하면 잠재적인 단점이 있습니다. 장기 캐싱이 어려워질 수 있습니다. 예를 들어, 애플리케이션 코드를 별도로 업데이트하면 타사 라이브러리가 변경되지 않은 경우에도 브라우저가 모든 타사 라이브러리를 다시 다운로드하게 됩니다. 🎜🎜애플리케이션에서 JavaScript를 자주 업데이트하려는 경우 타사 라이브러리를 자체 파일로 추출하는 것을 고려해야 합니다. 이렇게 하면 애플리케이션 코드를 변경해도공급업체 추출
vendor.js
파일 캐시에 영향을 주지 않습니다. Mix의extract
메소드는 이에 대한 편의를 제공합니다: 🎜rrreee🎜extract
메소드는vendor.js
배열로 추출하려는 모든 라이브러리 또는 모듈을 다음과 같이 허용합니다. 매개변수. 위 예제의 코드 조각을 사용하여 Mix는 다음 파일을 생성합니다: 🎜🎜🎜🎜public/js/manifest.js
: Webpack 런타임 매니페스트🎜🎜public /js/vendor.js
: 타사 라이브러리 코드🎜🎜public/js/app.js
: 애플리케이션 코드 🎜< /ul>🎜🎜JavaScript 오류를 방지하려면 다음 파일을 적응형 순서로 로드해야 합니다. 🎜rrreee🎜🎜🎜🎜React
🎜Mix는 React 지원에 필요한 Babel 플러그인을 자동으로 설치할 수 있습니다. 이를 달성하려면mix.js()
를mix.react()
로 바꾸면 됩니다. 🎜rrreee🎜Mix는 백그라운드에서 다운로드되고 해당babel을 포함합니다. 사전 설정 반응
Babel 플러그인. 🎜🎜🎜🎜🎜Vanilla JS
🎜 및mix.styles() 사용
스타일시트 통합과 유사하게scripts()
메서드를 사용하여 원하는 수의 JavaScript 파일을 통합하고 최소화할 수도 있습니다. 🎜rrreee🎜JavaScript를 컴파일하는 데 Webpack이 필요하지 않은 레거시 코드의 경우, 이 옵션은 특히 유용합니다. 🎜🎜{tip}
mix.babel()
은mix.scripts()
의 작은 변형입니다. 메소드 서명은scripts
와 정확히 동일하지만 통합 파일은 ES2015 코드를 브라우저가 이해할 수 있는 바닐라 JavaScript로 변환하는 Babel에 의해 컴파일됩니다. 🎜🎜🎜🎜🎜🎜🎜🎜사용자 정의 Webpack 구성
Lavarel Mix는 시작 및 작동 속도를 높이기 위해 백그라운드에서 사전 구성된
webpack.config.js
파일을 참조합니다. 경우에 따라 이 파일을 수동으로 편집해야 할 수도 있습니다. 참조해야 할 특별한 로더나 플러그인이 있을 수도 있고, Sass 대신 Stylus를 사용하는 것을 선호할 수도 있습니다. 이 경우 두 가지 옵션이 있습니다.webpack.config.js
文件以加速启动和运行。有时,你可能需要手动编辑这个文件。你可能有一个特殊的加载器或插件需要引用,或者可能更愿意用 Stylus 代替 Sass。这种情况下,你有两个选择:合并自定义配置
Mix 提供了
rrreeewebpackConfig
方法来合并任意简短的 Webpack 配置以覆盖已有配置。这是个非常勾人的选择,因为它不要求你复制和维护你自己的webpack.config.js
副本。webpackConfig
方法接受一个对象作为作参数,它包含你想要应用的任何 Webpack 特定配置 ,自定义配置文件
如果你想完全自定义 Webpack 配置,将
node_modules/laravel-mix/setup/webpack.config.js
文件复制到项目的根目录。然后将package.json
文件中所有的--config
引用都指向新复制的配置文件。如果选择用这种方式自定义配置,Mixwebpack.config.js
后续的任何更新,都必须手动合并到你的自定义配置文件中。复制文件 & 目录
rrreeecopy
方法可以用于将文件和目录复制到新位置。当node_modules
目录中特殊的资源需要重新定位到public
文件夹时,这个方法很有用。复制文件夹时,
rrreeecopy
方法将扁平化目录结构。想要保持目录的原始结构,需要使用copyDirectory
方法:版本管理 / 缓存销毁
许多开发者在他们编译后的资源添加时间戳或唯一令牌作后缀,强制浏览器加载新的资源,以替换旧的代码副本。Mix 可以使用
version
方法替你处理它们。.
rrreeeversion
方法自动在所有编译后的文件名后追加唯一的哈希值,从而实现更方便的缓存销毁:在生成版本化文件后,你不会知道确切的文件名。因此,你需要在 views 中使用 Laravel 的全局
rrreeemix
函数载入相应的哈希资源。mix
函数自动判断哈希文件的当前文件名:通常在开发阶段不需要版本化文件,你可以仅在运行
npm run production
사용자 정의 구성 병합
Mix는
webpackConfig
병합 방법을 제공합니다. 기존 구성을 덮어쓰는 짧은 Webpack 구성입니다. 이는webpack.config.js
의 복사본을 복사하고 유지 관리할 필요가 없기 때문에 매우 매력적인 옵션입니다.webpackConfig
메소드는Webpack 특정 구성 , rrreee을 포함하는 객체를 인수로 받아들입니다. name="95cfe8" data-unique="95cfe8">사용자 정의 구성 파일
Webpack 구성을 완전히 사용자 정의하려면🎜🎜🎜node_modules/laravel-mix/setup/webpack을 추가하세요. .config.js
파일을 프로젝트의 루트 디렉터리에 복사하세요. 그런 다음package.json
파일의 모든--config
참조가 새로 복사된 구성 파일을 가리키도록 합니다. 이 방식으로 구성을 사용자 정의하기로 선택한 경우 Mixwebpack.config.js
에 대한 모든 후속 업데이트를 수동으로 사용자 정의 구성 파일에 병합해야 합니다.🎜파일 및 디렉터리 복사 중
🎜copy
메소드를 사용하여 파일과 디렉터리를 새 위치로 복사할 수 있습니다. 이 방법은node_modules
디렉터리의 특수 리소스를public
폴더로 재배치해야 할 때 유용합니다. 🎜rrreee🎜폴더를 복사할 때copy
메소드는 디렉토리 구조를 평면화합니다. 디렉터리의 원래 구조를 유지하려면copyDirectory
메서드를 사용해야 합니다: 🎜rrreee🎜🎜🎜🎜버전 관리/캐시 파기
🎜많은 개발자가 컴파일된 리소스에 타임스탬프나 고유 토큰을 접미사로 추가하여 브라우저가 이전 코드 복사본을 대체하기 위해 새 리소스를 로드하도록 합니다. Mix는version
메소드를 사용하여 이를 처리할 수 있습니다. .🎜🎜version
메서드는 컴파일된 모든 파일 이름에 고유한 해시 값을 자동으로 추가하므로 보다 편리한 캐시 삭제가 가능합니다. 🎜rrreee🎜버전이 지정된 파일을 생성한 후에는 정확한 파일 이름을 알 수 없습니다. . 따라서 해당 해시 리소스를 로드하려면 뷰에서 Laravel의 전역mix
함수를 사용해야 합니다.mix
함수는 해시 파일의 현재 파일 이름을 자동으로 결정합니다: 🎜rrreee🎜 일반적으로 개발 단계에서는 버전이 지정된 파일이 필요하지 않으며npm run을 실행할 때만 버전을 실행할 수 있습니다. 생산
화학적 처리: 🎜rrreee🎜🎜🎜🎜🎜🎜Browsersync Reload
BrowserSync는 파일 변경 사항을 자동으로 감지하고 수동 새로 고침 없이 브라우저에 변경 사항을 삽입할 수 있습니다.
rrreeemix.browserSync()
메서드를 호출하여 이 지원을 활성화할 수 있습니다.mix.browserSync()
方法开启此项支持:可以传递字符串(代理)或对象 Y(BrowserSync 设置)给此方法。然后使用
npm run watch
命令启动 Webpack 的开发服务器。再编辑脚本或者 PHP 文件,就会看到浏览器立即刷新以响应你的修改。环境变量
可以通过在
rrreee.env
文件中添加MIX_
前缀,将环境变量注入到 Mix:一旦此变量被定义在
rrreee.env
文件中,就可以借助process.env
对象访问它。如果在运行watch
任务时这个值发生改,就需要重启任务:通知
如果可用,Mix 将自动为每次绑定显示操作系统通知。这将为你提供编译是否成功的实时反馈。不过,可能在某些情况下,你希望禁用通知。一个例子是在生产服务器上触发 Mix。通知可以借助
문자열(프록시) 또는 개체 Y(BrowserSync 설정)를 이 메서드에 전달할 수 있습니다. 그런 다음disableNotifications
rrreeenpm run watch
명령을 사용하여 Webpack 개발 서버를 시작하세요. 스크립트나 PHP 파일을 다시 편집하면 수정 사항에 따라 브라우저가 즉시 새로 고쳐지는 것을 볼 수 있습니다. 🎜환경 변수🎜🎜를.env
파일에 추가할 수 있습니다. Mix에 환경 변수를 삽입하기 위한MIX_
접두사: 🎜rrreee🎜이 변수가.env
파일에 정의되면process.env
를 사용할 수 있습니다. 객체가 이에 액세스합니다.watch
작업을 실행할 때 이 값이 변경되면 작업을 다시 시작해야 합니다: 🎜rrreee🎜🎜🎜🎜🎜알림🎜🎜가능한 경우 Mix는 각 바인딩에 대한 운영 체제 알림을 자동으로 표시합니다. 그러면 컴파일이 성공했는지 여부에 대한 실시간 피드백이 제공됩니다. 그러나 알림을 비활성화하려는 상황이 있을 수 있습니다. 예를 들어 프로덕션 서버에서 Mix를 트리거하는 경우가 있습니다.disableNotifications
메소드를 사용하여 알림을 구성할 수 있습니다. 🎜rrreee🎜이 글은 🎜LearnKu.com🎜 웹사이트에 처음 게시되었습니다. 🎜🎜
- Laravel Mix