好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

让我们用 laravel-mix 为 TypeScript 和 Sass 创建一个简单的编译环境,可

介绍

前端编译TypeScript、Sass、模板引擎等时经常用到Gulp和webpack。
这是我个人的印象,但它们似乎都难以管理,因为它们的描述往往复杂而冗长。
我不想积极进行,因为我要担心加载器的顺序并且有很多配置选项,我必须花时间去了解它们。
我想推荐那里 laravel 混合 是。

粗略地说,laravel-mix 使得编写 webpack 变得很容易。
它使 webpack 易于使用,因此它自然具有 webpack 打包和编译等功能。
顾名思义,你不使用“Laravel”吗?你可能会这么想,但你可以使用 laravel-mix 而不使用 Laravel!
人们很好,因为他们不了解 Laravel。

在本文中,我们将创建一个环境来使用 laravel-mix 编译 TypeScript 和 Sass。

创造环境

准备

首先,创建一个练习目录并尝试编辑 laravel-mix 文件。
创建一个名为 mix-practice 的目录并使用 npm init -y 创建 package.josn 文件。

命令行

  mkdir   mix  -  practice 
 cd   mix  -  practice 
 npm   init   -  y 
 

现在你可以安装 laravel-mix 了。
现在安装!

命令行

  npm   install   laravel  -  mix   --  save  -  dev 
 

不要忘记 --save-dev ,因为你只需要在开发环境中安装它。
安装后,创建一个描述 laravel-mix 的文件。
就像 webpack 文件名是 webpack.config.js
laravel-mix 的文件名是 webpack.mix.js 。

命令行

  touch   webpack  .  mix  .  js 
 

然后在这个文件的顶部加载之前安装的 laravel-mix。

webpack.mix.js

  const   mix   =   require  (  'laravel-mix'  ); 
 

到目前为止的目录结构是这样的。

目录结构

  mix  -  practice 
 ├─   node_modules  / 
 ├─   package  -  lock  .  json 
 ├─   package  .  json 
 └─   webpack  .  mix  .  js 
 

laravel-mix 编辑 (TypeScript)

接下来,让我们实际编写 laravel-mix,体验一下与 webpack 的区别。
让我们写信给 webpack.mix.js。
首先是打字稿。

webpack.mix.js

  const   mix   =   require  (  'laravel-mix'  ); 

 mix  .  setPublicPath  (  'dist'  ); 
 mix  .  ts  (  'src/ts/index.ts'  ,   'dist/js'  ); 
 

现在就是这样。时间太长了……
使用 .setPublicPath() 指定编译目标(公共目录)。
为 .ts() 的第一个参数指定编译源。
如果要捆绑,请将其指定为数组。

例子

  mix  .  ts  ([  'src/ts/index.ts'  ,   'src/ts/sample.ts'  ],   'dist/js'  ) 
 

第二个参数指定输出目的地。
编译 src/ts/index.ts 并输出到 dist/js 。

让我们重写 package.json 的 scripts 来执行 webpack.mix.js 。

包.json

  "scripts"  :   { 
   "build"  :   "mix"  , 
   "watch"  :   "mix watch"  , 
   "production"  :   "mix --production" 
 }, 
 

现在我们已经到了可以暂时编译 TypeScript 的地步了
我还没有安装必要的打字稿或 ts-loader。
手动

命令行

  npm   install   typescript   ts  -  loader   --  save  -  dev 
 

但是,如果您将其留给 laravel-mix,它将读取 webpack.mix.js 的内容并解析依赖关系并自动安装它。
所以让我们运行上面的脚本。

命令行

  npm   run   build 
 

运行后输出如下

命令行

  Additional   dependencies   must   be   installed  .   This   will   only   take   a   moment  . 
 Running  :   npm   install   ts  -  loader   typescript   --  save  -  dev   --  legacy  -  peer  -  deps 
 Finished  .   Please   run   Mix   again  . 
 

package.json 添加了 ts-loader 和 typescript。
顺便说一句,如果你按照 Please run Mix again. 的指示再次尝试 npm run build ,你会得到一个错误,因为没有 src/ts/index.ts 。

让我们创建 tsconfig.json 和 index.ts 。
首先创建 tsconfig.json 。

命令行

  tsc   --  init 
 

tsconfig.json 的设置一旦开始就无穷无尽(骗人的,我没有完全掌握它们,因为我没有充分研究它们),所以我只会挑选你设置好的部分。

tsconfig.json

  { 
   "compilerOptions"  :   { 
     "target"  :   "es2015"  , 
     "lib"  :   [  "DOM"  ,   "ESNext"  ], 
     "module"  :   "ES2015"  , 
     "sourceMap"  :   true  , 
     "strict"  :   true  , 
   } 
 } 
 

接下来,创建编译源目录 src/ts/ 和文件 index.ts 。

目录结构

  mix  -  practice 
 ├─   node_modules  / 
 ├─   src 
 │    └─   ts 
 │       └─   index  .  ts 
 ├─   package  -  lock  .  json 
 ├─   package  .  json 
 └─   webpack  .  mix  .  js 
 

索引.ts

  const   greet   =   (  text:   string  )   =>   { 
   console  .  log  (  text  ); 
 } 

 greet  (  'hello, world'  ); 
 

现在让我们编译。

命令行

  npm   run   build 
 

如果显示如下则表示成功。

 webpack compiled successfully
 

确保 dist/js/index.js 已完成。

目录结构

  mix  -  practice 
 ├─   dist 
 │    ├─   js 
 │    │    └─   index  .  js 
 │    └─   mix  -  manifest  .  json 
 ├─   node_modules  / 
 ├─   src 
 │    └─   ts 
 │       └─   index  .  ts 
 ├─   package  -  lock  .  json 
 ├─   package  .  json 
 └─   webpack  .  mix  .  js 
 

laravel-mix 编辑 (Sass)

接下来是萨斯。
这也是一个时刻。

webpack.mix.js

  const   mix   =   require  (  'laravel-mix'  ); 

 mix  .  setPublicPath  (  'dist'  ); 
 mix  .  ts  (  'src/ts/index.ts'  ,   'dist/js'  ); 
 mix  .  sass  (  'src/scss/style.scss'  ,   'dist/css/style.css'  ) 
   .  options  ({ 
     processCssUrls:   false 
   }); 
 

options({processCssUrls: false}) 是与 url() 相关的设置,例如css中使用的 background-image: url() 。

scss 从不同的位置编译并输出到不同的位置。
所以用下面的目录结构

例子

  root 
 ├─   dist 
 │    └─   css 
 │       └─   style  .  css 
 └─   src 
    ├─   img 
    │    └─   sample  .  png 
    └─   scss 
       └─   style  .  scss 
 

在 scss 目录的相对路径描述中

样式.scss

  background  -  image:   url  (  'img/sample.png'  ); 
 

如果你这样做,编译后

样式.css

  background  -  image:   url  (  'images/sample.png?3a0834378861f9a4523f166fed2c0be9'  ); 
 

我不能很好地阅读图像,因为它是这样重写的。
因此,如果使用 processCssUrls: false ,则 url() 的内容会被编译成scss中写的那样。
因此,让我们将图像复制到 dist/img 。

手动复制很麻烦,所以让 laravel-mix 也这样做。

webpack.mix.js

  const   mix   =   require  (  'laravel-mix'  ); 

 mix  .  setPublicPath  (  'dist'  ); 
 mix  .  ts  (  'src/ts/index.ts'  ,   'dist/js'  ); 
 mix  .  sass  (  'src/scss/style.scss'  ,   'dist/css/style.css'  ) 
   .  options  ({ 
     processCssUrls:   false 
   }); 
 mix  .  copy  (  'src/img'  ,   'dist/img'  ); 
 

这会将 img 目录复制到 dist。
之后,适当准备scss文件和图像文件。

样式.scss

  h1   { 
   color:   red  ; 
   &  .  color  -  blue   { 
     color:   blue  ; 
   } 
 } 
 div   { 
   width:   100  %  ; 
   height:   250  px  ; 
   background  -  image:   url  (  'img/sample.png'  ); 
 } 
 

目录结构

  mix  -  practice 
 ├─   dist 
 │    ├─   js 
 │    │    └─   index  .  js 
 │    └─   mix  -  manifest  .  json 
 ├─   node_modules  / 
 ├─   src 
 │    ├─   img 
 │    │    └─   sample  .  png 
 │ ├─   scss 
 │    │    └─   style  .  scss 
 │ └─   ts 
 │        └─   index  .  ts 
 ├─   package  -  lock  .  json 
 ├─   package  .  json 
 └─   webpack  .  mix  .  js 
 

现在让我们构建。

命令行

  npm   run   build 
 

最初,将安装 sass 和 sass-loader(如果尚未安装),就像 TypeScript 一样。
一旦你有了所需的包,你就可以构建了。
如果编译成功,目录结构将如下所示:

目录结构

  mix  -  practice 
 ├─   dist 
 │    ├─   css 
 │    │    └─   style  .  css 
 │    ├─   img 
 │    │    └─   sample  .  png 
 │    ├─   js 
 │    │    └─   index  .  js 
 │    └─   mix  -  manifest  .  json 
 ├─   node_modules  / 
 ├─   src 
 │    ├─   img 
 │    │    └─   sample  .  png 
 │ ├─   scss 
 │    │    └─   style  .  scss 
 │ └─   ts 
 │        └─   index  .  ts 
 ├─   package  -  lock  .  json 
 ├─   package  .  json 
 └─   webpack  .  mix  .  js 
 

将 index.html 直接放在dist下进行确认。
由于只是为了确认,我只写最低限度的。

索引.html

  <!  DOCTYPE   html  > 
 <  html   lang  =  "ja"  > 
 <  head  > 
   <  meta   charset  =  "UTF-8"  > 
   <  link   rel  =  "stylesheet"   href  =  "css/style.css"  > 
   <  title  >  Document  <  /title>
</  head  > 
 <  body  > 
   <  h1  >  赤です  <  /h1>
  <h1 class="color-blue">青です</  h1  > 
   <  div  ><  /div>
  <script src="js/in  dex  .  js  "></script>
</body>
</html>

  

在浏览器中查看,如果以下都OK,就大功告成了!谢谢你的辛劳工作!

“它是红色的”是红色的 “它是蓝色的”是蓝色的 显示图像 开发者工具控制台中显示“hello, world”

关于 mix-manifest.json

在我知道之前,已经输出了一个名为 mix-manifest.json 的文件。
这是一个缓存避免文件,即使您更改文件也可以防止缓存被反映。
在使用 Laravel 时,似乎调用脚本文件时的 mix() 函数会生成查询参数并避免缓存。
在像这次这样不使用 Laravel 的环境下没有多大意义(除非你创建了一个程序,将查询参数添加到 mix-manifest.json 中的文件中),所以最好不要输出它或使用 gitignore 等。我猜。
顺便说一句,我有以下设置来防止输出。

webpack.mix.json

  const   fs   =   require  (  'fs'  ); 
 mix  .  then  (()   =>   { 
     fs  .  unlinkSync  (  'dist/mix-manifest.json'  ) 
   }); 
 

最后

有没有觉得 laravel-mix 好写?
这次我在 webpack.mix.js 单独写了描述,不过你可以一次写成方法链。

webpack.mix.js

  const   mix   =   require  (  'laravel-mix'  ); 
 const   fs   =   require  (  'fs'  ); 

 mix  .  setPublicPath  (  'dist'  ) 
   .  ts  (  'src/ts/index.ts'  ,   'dist/js'  ) 
   .  sass  (  'src/scss/style.scss'  ,   'dist/css/style.css'  ) 
   .  options  ({ 
     processCssUrls:   false 
   }) 
   .  copy  (  'src/img'  ,   'dist/img'  ); 

 mix  .  then  (()   =>   { 
     fs  .  unlinkSync  (  'dist/mix-manifest.json'  ) 
   }); 
 

除了Vue、React等前端框架和库,laravel-mix还可以增加EJS、Nunjucks等模板引擎、监控文件变化和浏览器热重载的功能(BrowserSync)、sourceMap等各种东西.
从 webpack 和 gulp 的麻烦中解脱出来。

参考


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308624516.html

查看更多关于让我们用 laravel-mix 为 TypeScript 和 Sass 创建一个简单的编译环境,可的详细内容...

  阅读:52次