# san-loader **Repository Path**: mirrors_ecomfe/san-loader ## Basic Information - **Project Name**: san-loader - **Description**: San-Loader 是基于 webpack 的工具,允许开发者书写 San 单文件的方式来进行组件开发。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2026-02-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # San-Loader San-Loader 是基于 webpack 的工具,允许开发者书写 San 单文件的方式来进行组件开发。 ```html ``` San 单文件在写法上与 Vue 类似,San-Loader 会将 `template`、`script`、`style` 等标签块当中的内容和属性提取出来,并交给 webpack 分别进行处理。最终单文件对外返回的将是一个普通的 San 组件类,我们可以直接使用它进行 San 组件的各种操作: ```js import App from './App.san'; let app = new App(); app.attach(document.body); ``` ## 使用方法 通过 npm 进行 San-Loader 的安装: ```shell npm install --save-dev san-loader ``` 然后在 webpack 的配置文件上增加一条规则应用到 `.san` 文件上,并且增加一个 SanLoaderPlugin: ```js const SanLoaderPlugin = require('san-loader/lib/plugin'); module.exports = { // ... module: { rules: [ { test: /\.san$/, loader: 'san-loader' } // ... ] }, plugins: [new SanLoaderPlugin()] }; ``` 如前面提到,San-Loader 会将单文件的各个部分拆分出来,并交给其他的 Loader 来进行资源处理,因此还需要配置各个模块的处理方法,比如: ```js const SanLoaderPlugin = require('san-loader/lib/plugin'); module.exports = { // ... module: { rules: [ { test: /\.san$/, loader: 'san-loader' }, { test: /\.js$/, loader: 'babel-loader' }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.html$/, loader: 'html-loader' } // ... ] }, plugins: [new SanLoaderPlugin()] }; ``` 在默认情况下,`template`、`script`、`style` 会分别采用 `.html`、`.js`、`.css` 所对应的 Loader 配置进行处理,当然我们也可以在相应的标签上添加 `lang` 属性来指定不同的语言处理比如: ```html ``` 这样,对应的样式模块就可以当成 `.less` 文件进行处理,只需要配置上相应的 Loader 即可。 ```js // ... module.exports = { // ... module: { rules: [ // ... { test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } ] } }; ``` 更加完整的 webpack 配置,可以参考示例: - [San-Loader Webpack HMR 配置实例](https://github.com/ecomfe/san-loader/blob/master/examples/hmr/webpack.config.js) - [San-Loader Webpack Minimal](https://github.com/ecomfe/san-loader/blob/master/examples/minimal/webpack.config.js) ## Options | Name | Type | Default | Description | | :---------------: | :------------------------: | :------: | :------------------------------------------------------------------------ | | `compileTemplate` | {'none'|'aPack'|'aNode'} | `'none'` | 将组件的`template` 编译成`aPack`、`aNode`,**默认不编译**,详细见下面说明 | | `esModule` | `{Boolean}` | `false` | san-loader 默认使用 CommonJS 模块语法来生成 JS 模块,将该参数设为 true 可以改用 ES 模块语法 | | `autoAddScriptTag` | `{Boolean}` | `true` | `.san` 文件中不含 `script` 标签时自动添加,默认为`true` | **特殊说明:** > `compileTemplate`:San 组件的`string`类型的`template`通过编译可以返回[aNode](https://github.com/baidu/san/blob/master/doc/anode.md)结构,在定义组件的时候,可以直接使用`aNode`作为 template,这样可以减少了组件的`template`编译时间,提升了代码的执行效率,但是转成`aNode`的组件代码相对来说比较大,所以在`san@3.9.0`引入的概念的`aNode`压缩结构`aPack`,**使用`aPack`可以兼顾体积和效率的问题**。san-loader 中的`compileTemplate`就是来指定要不要将组件编译为`aPack`/`aNode`。**如果只想,单文件使用`compileTemplate`编译成对应的`aPack`或者`aNode`,可以直接在`template`上面写:`